我用winsocket 写了一个服务器测试程序,请问如何为这个程序设置一个超时器,比如再recv 时候,如果在设定时间内没有取到任何数据,则就返回,而不必一直阻塞。

解决方案 »

  1.   

    线程同步函数
    WaitForSingleObject可以做到,等待一定时间没有结束就继续
      

  2.   

    这个一般要用到异步会比较好点,注册网络事件WSASelectEvent
    利用WaitForSingleObject来等待,它的最后一个参数就是设置超时的
      

  3.   

    这个好办:FD_ZERO(&stRead);
    FD_SET(sock_bc,&stRead);
    setimeout.tv_sec = 0;
    setimeout.tv_usec = 0;
    result = select(0,&stRead,NULL,NULL,&setimeout);

    if(result > 0)
    {
    from_len = sizeof(SOCKADDR);
    memset(&Recv_Pkt,0,sizeof(Recv_Pkt));
    result = recvfrom(sock_bc,(char*)&Recv_Pkt,sizeof(Recv_Pkt),
    0,(SOCKADDR*)&sck_from_bc,&from_len);
                    }