bool CDataSocket::SetTimeOut()
{
struct fd_set readfdset;
struct timeval timeout;
timeout.tv_sec=m_iTimeOut;
timeout.tv_usec=0;
FD_SET(m_hSocket,&readfdset);
if(select(m_hSocket,(fd_set *)&readfdset,NULL,NULL,
(struct timeval *)&timeout)==0)
{
return true;
}
return false;
}
/////////////////////////////////上面的代码不管用,执行完select()操作之后,总是直接跳到return false;那一行了。而接下来再执行 recv()操作时,就出现了无限等待了.注:我已经将服务程序设置成在接到请求后便执行死循环以测试上述代码
请问这是为什么,谢谢!
{
struct fd_set readfdset;
struct timeval timeout;
timeout.tv_sec=m_iTimeOut;
timeout.tv_usec=0;
FD_SET(m_hSocket,&readfdset);
if(select(m_hSocket,(fd_set *)&readfdset,NULL,NULL,
(struct timeval *)&timeout)==0)
{
return true;
}
return false;
}
/////////////////////////////////上面的代码不管用,执行完select()操作之后,总是直接跳到return false;那一行了。而接下来再执行 recv()操作时,就出现了无限等待了.注:我已经将服务程序设置成在接到请求后便执行死循环以测试上述代码
请问这是为什么,谢谢!
if( setsockopt( m_s , SOL_SOCKET , SO_RCVTIMEO , (const char *)&rcvtimeo , sizeof(rcvtimeo) ) == SOCKET_ERROR)
{
dwErr = WSAGetLastError() ;
sprintf( szErr , "Error WSAIoctl = %ld " , dwErr ) ;
AfxMessageBox( szErr ) ;
closesocket( m_s ) ;
return ;
}
if( setsockopt( m_s , SOL_SOCKET , SO_RCVTIMEO , (const char *)&rcvtimeo , sizeof(rcvtimeo) ) == SOCKET_ERROR)
{
dwErr = WSAGetLastError() ;
sprintf( szErr , "Error WSAIoctl = %ld " , dwErr ) ;
AfxMessageBox( szErr ) ;
closesocket( m_s ) ;
return ;
}
if( setsockopt( m_s , SOL_SOCKET , SO_RCVTIMEO , (const char *)&rcvtimeo , sizeof(rcvtimeo) ) == SOCKET_ERROR)
{
dwErr = WSAGetLastError() ;
sprintf( szErr , "Error WSAIoctl = %ld " , dwErr ) ;
AfxMessageBox( szErr ) ;
closesocket( m_s ) ;
return ;
}