如何控制阻塞模式下socket通信的accept的等待时间?请帮忙修改程序,谢谢!
我的server端程序用sktConnect进行监听,用sktClient进行数据接收,阻塞模式。在下面的程序中,我想在调用accept时不要等待的时间太长,而是限时15秒,但一直不能正确运行。当客户端调用connect时,服务端运行到下面所示的select时,能等待15秒就运行下面的语句了,但返回的nRet值总是0,即超时错,不能建立连接。请问要实现我素要求的功能,程序该如何修改?谢谢!
//设置非阻塞方式连接
unsigned long ul=1;
nRet = ioctlsocket(sktConnect, FIONBIO, (unsigned long*)&ul);
if(nRet==SOCKET_ERROR){
AfxMessageBox("设置非阻塞方式错误");
return FALSE;
}
int ilenofsockaddr=sizeof(sockaddrin);
sktClient=accept(sktConnect,(struct sockaddr far *)&sockaddrin,&ilenofsockaddr);
struct timeval timeout;
fd_set r;
FD_ZERO(&r);
FD_SET(sktConnect, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec=0;
nRet=select(0, 0, &r, 0, &timeout);
if(nRet<=0){
AfxMessageBox("设置连接超时错误");
return FALSE;
}
//再设回阻塞模式
unsigned long ul1=0;
nRet = ioctlsocket(sktConnect, FIONBIO, (unsigned long*)&ul1);
if(nRet==SOCKET_ERROR){
AfxMessageBox("设置阻塞模式错误");
return FALSE;
}