select后recv的问题
windows下
struct timeval timeout ;
fd_set r;
int ret;
FD_ZERO(&r);
FD_SET(clientC, &r);
timeout.tv_sec = 5; //连接超时2秒
timeout.tv_usec = 0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
printf("超时\n");
SetEvent(g_envent_Ready[id-1]);
SetEvent(g_envent_OneBmpEnd[id-1]);
closesocket(clientC);
clientC = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
memset(&clientAddress,0,sizeof(clientAddress));
EnterCriticalSection(&cs);
ID_connect[id-1] = false;
LeaveCriticalSection(&cs);
break;
}
if ((recv_num = recv(clientC,(char *)&ready,1,0)) == SOCKET_ERROR || recv_num == 0)
{
printf("recv ifready failed : %d\n",WSAGetLastError());
SetEvent(g_envent_Ready[id-1]);
SetEvent(g_envent_OneBmpEnd[id-1]);
closesocket(clientC);
clientC = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
memset(&clientAddress,0,sizeof(clientAddress));
EnterCriticalSection(&cs);
ID_connect[id-1] = false;
LeaveCriticalSection(&cs);
break;
}