如题。例如把connect()的尝试连接的最大等待时间设为2.5秒。如果超过2.5秒未能连接成功,要能够正常关闭Socket并成功释放内存。

解决方案 »

  1.   

    补充一下:是Windows Sockets系统函数,不是mfc。
      

  2.   

    同意楼上的,楼主查下MSDN用setsockopt()改变SOCKET的属性
      

  3.   

    试一下:
    int i=100;
    setsockopt (socket, SOL_SOCKET, SO_RCVTIMEO,(char*)&i, sizeof ( int ));
      

  4.   

    int i=100;
    setsockopt (socket, SOL_SOCKET, SO_SNDTIMEO,(char*)&i, sizeof ( int ));
      

  5.   

    楼上的代码试过了,不行。SO_RCVTIMEO int 接收超时。
    SO_SNDTIMEO int 发送超时。把i=100;改为i=2;都不行,和原来一样等了20秒才返回。setsockopt()支持的是发送和接收超时,我要的是连接超时,setsockopt()没有这个选项。
      

  6.   

    不可能在CONNECT上设置超时。
    你有两种办法。一用非堵塞。
    二开一个线程。这里面设计你可以搞个EVENT,线程结束的时候SETEVENT。主线程wait的时候加上一个超时的时间,假如到时间后EVENT未设置,则closesocket,这个会使线程中的connect返回,线程也自动清除。
      

  7.   

    学习 sevencat(七猫)!
    thx!
      

  8.   

    谢谢sevencat(七猫)、谢谢sharkhuang(爱情和程序都读不懂) 、谢谢bluebohe(薄荷) (MVP) 刚刚的测试,用sevencat(七猫)的第二个方法,长时间、同时建立大量线程下,跨线程closesocket()没有出现问题。