为什么socket 返回-1?
#include <winsock2.h>
class server
{public:
virtual int run(int argc,char ** argv);
protected:
virtual int open(short port=0);
virtual int wait_for_multiple_events();
virtual int handle_data(int sock=0);
private:
int serverfd;
};
int server::run(int argc,char ** argv)
{
if (open(argc>1?atoi(argv[1]):10000)==-1) return -1;
for(;;)
{
if(wait_for_multiple_events()==-1) return -1;
}
return 0;
}
server::open(short port)
{
struct sockaddr_in serveraddr;
if((serverfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{printf("socket error!");return -1;}//单步运行到这里serverfd==-1,为什么??
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(port);
serveraddr.sin_addr.s_addr=INADDR_ANY;
// bzero(&(serveraddr.sin_zero),8);
if (bind(serverfd,(struct sockaddr*)&serveraddr,sizeof(struct sockaddr))==-1)
{printf("bind error!");return -1;}
if (listen(serverfd,1)==-1){printf("bind error!");return -1;}
return 0;
};
int server::handle_data(int sock)
{ char buf[22],spare[22];
int n;
return 0;
};
int server::wait_for_multiple_events()
{ int newfd,size;
struct sockaddr_in clientaddr;
size=sizeof(struct sockaddr_in);
newfd=accept(serverfd,(struct sockaddr *)&clientaddr,&(size));
handle_data(newfd);
return 0;
} ;
int main(int argc, char* argv[])
{
server s;
s.run(argc,argv);
return 0;
}