|
发表于 2009-11-6 00:38:49
|
显示全部楼层
IP:江苏扬州
问题解决了,不是第一个不好使,具体原因如下如下:
我创建了一个socket Sever8187,然后用非阻塞+select来设置accept超时:
pulArgp = 1;
if(ioctlsocket(Sever8187, FIONBIO, &pulArgp))
{
perror("ioctlsocket");
return;
}
然后调用select:
int Host_WaitForClient(int WaitSocket, int i_iWaitMilliSec)
{
fd_set FdSet;
struct timeval waitTime;
FD_ZERO(&FdSet);
FD_SET(WaitSocket, &FdSet);
waitTime.tv_sec = i_iWaitMilliSec;
waitTime.tv_usec = 0;
if (select(0, &FdSet, NULL, NULL, &waitTime) > 0)
return TRUE;
return FALSE;
}
当有链接时执行:
sockConn = accept(Sever8187, (struct sockaddr *)&Client_addr,&sin_size))
此时的sockConn的属性与Sever8187一样也是非阻塞的,所以sockConn在执行recv时根本不等待就直接返回错误了。
今天我又把sockConn改成阻塞模式就好了:
pulArgp = 0;
if(ioctlsocket(sockConn, FIONBIO, &pulArgp))
{
perror("ioctlsocket");
return;
}
谢谢各位,希望这对各位有所帮助! |
|