代码如下:
int dTimeOut = 3000;
if(!sock.SetSockOpt(SO_RCVTIMEO,(char *)&dTimeOut,sizeof(int),SOL_SOCKET))
{
   int nErr = WSAGetLastError();
   return false;
}if(!sock.SetSockOpt(SO_SNDTIMEO,(char *)&dTimeOut,sizeof(int),SOL_SOCKET))
{
   int nErr = WSAGetLastError();
   return false;
}unsigned   long   ul1=   1   ;   
if(!sock.IOCtl(FIONBIO,   (unsigned   long*)&ul1))
{
return false;
}然后我在后面的程序中,ReceiveFrom中,接收的时候会一直等待,而不是如果没有数据,等了3秒后,没有自动停止接收,而是在那一直等,怎么回事?>

解决方案 »

  1.   

    我也出现过类似的情况,后来直接改成SOCKET API了,CSocket类总感觉问题多多。
      

  2.   

    http://www.chinaunix.net/jh/23/817533.html
      

  3.   

     看了半天,下面的帖子中说微软的setsockopt好像根本不支持超时设置,
    http://www.kaifa6.com/v/mfcshouce/class/CAsyncSocket_SetSockOpt.htmSetSockOpt不支持的Berkeley软件发布(BSD)选项有:
    值 类型 含义
    SO_ACCEPTCONN BOOL 套接字正在监听,允许接收连接
    SO_ERROR int 返回并清除错误状态
    SO_RCVLOWAT int 接收最低水准标志
    SO_RCVTIMEO int 接收到超时消息
    SO_SNDLOWAT int 发送最低水准标志
    SO_SNDTIMEO int 发送超时消息
    SO_TYPE int 设置套接字的类型
    IP_OPTIONS int 设置IP头上的选项字段