WSAEventSelect模型问题,为什么判断了一次后就无法判断了,一直超时
while(TRUE)
{
char information[500]="";
gets(information);
int s=WSAWaitForMultipleEvents(1,myevent,TRUE,0,FALSE);
if(s!=WSA_WAIT_FAILED&&s!=WSA_WAIT_TIMEOUT)
WSAEnumNetworkEvents(mysocket[0],myevent[0],&EventStatus);
else continue;
if(EventStatus.lNetworkEvents&FD_WRITE)
{
if(EventStatus.iErrorCode[FD_WRITE_BIT]==0)
{
cout<<information<<endl;
send(mysocket[0],information,sizeof(information),0);
}
}
else if(EventStatus.lNetworkEvents&FD_CLOSE)
{
if(EventStatus.iErrorCode[FD_CLOSE_BIT]==0)
{
if(SOCKET_ERROR==closesocket(mysocket[0]))
{
cerr<<"The socket is close error!"<<"The error number is:"<<WSAGetLastError()<<endl;
return THE_EXE_IS_ERROR;
}
myevent[0]=0;
}
}
else continue;
}
#include<iostream>
#include<winsock2.h>
#pragma comment(lib,"ws2_32")
#define THE_EXE_IS_RIGHT 0
#define THE_EXE_IS_ERROR -1
using namespace std;
int main(int argc,char** argv)
{
WSADATA wsadata;
if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
{
cerr<<"The socker is start error!"<<endl;
return THE_EXE_IS_ERROR;
}
SOCKET mysocket[1];
WSAEVENT myevent[1];
mysocket[0]=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(mysocket[0]==INVALID_SOCKET)
{
cerr<<"The socket is create error!"<<"The error number is:"<<WSAGetLastError()<<endl;
return THE_EXE_IS_ERROR;
}
int herport=3030;
SOCKADDR_IN myaddr;
myaddr.sin_family=AF_INET;
myaddr.sin_port=htons(herport);
myaddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
if(SOCKET_ERROR==connect(mysocket[0],(SOCKADDR*)&myaddr,sizeof(myaddr)))
{
cerr<<"The socket is connect error!"<<"The error number is:"<<WSAGetLastError()<<endl;
return THE_EXE_IS_ERROR;
}
myevent[0]=WSACreateEvent();
WSAEventSelect(mysocket[0],myevent[0],FD_WRITE|FD_CLOSE);
WSANETWORKEVENTS EventStatus;
while(TRUE)
{
char information[500]="";
gets(information);
int s=WSAWaitForMultipleEvents(1,myevent,TRUE,0,FALSE);
if(s!=WSA_WAIT_FAILED&&s!=WSA_WAIT_TIMEOUT)
WSAEnumNetworkEvents(mysocket[0],myevent[0],&EventStatus);
else continue;
if(EventStatus.lNetworkEvents&FD_WRITE)
{
if(EventStatus.iErrorCode[FD_WRITE_BIT]==0)
{
cout<<information<<endl;
send(mysocket[0],information,sizeof(information),0);
}
}
else if(EventStatus.lNetworkEvents&FD_CLOSE)
{
if(EventStatus.iErrorCode[FD_CLOSE_BIT]==0)
{
if(SOCKET_ERROR==closesocket(mysocket[0]))
{
cerr<<"The socket is close error!"<<"The error number is:"<<WSAGetLastError()<<endl;
return THE_EXE_IS_ERROR;
}
myevent[0]=0;
}
}
else continue;
}
WSACleanup();
return THE_EXE_IS_RIGHT;
}