只有在阻塞方式下才能设置超时,
好像是SetTimeOut,是一个过程,有2个参数

解决方案 »

  1.   

    阻塞方式下,用TWinSocketStream.waitfordata(Timeout); Timeout就是超时
    可以设置的 if TWinSocketStream.waitfordata(1000) then
              begin
                 
              end;
      

  2.   

    阻塞方式下,用TWinSocketStream.waitfordata(Timeout); Timeout就是超时
    可以设置的 if TWinSocketStream.waitfordata(1000) then
              begin
                 
              end;
    是读写数据的超时,但怎样控制clientsocket连接超时呢。也就是说,在规定的时间内连接不成功就放弃连接。因为Clientsoket.open是要费时间的。
      

  3.   

    老兄,什么超时啊,是
    connect server
    send data timeout
    recv data timeoutwindows不支持connect timeout,linux支持
    不过可以:在连接时,先进行WaitForSingleObject(ClientSocket1.Socket.SocketHandle, TimeOut);不过得在一个线程中做send/recv timeout
    var
      timeout: Integer;
    begin
      timeout := 1000; // 1 s
      //发送数据timeout
      setsockopt(ClientSocket1.Socket.SocketHandle,  SOL_SOCKET, SO_SNDTIMEO, PChar(@timeout), sizeof(timeout));
      //接收数据timeout
      setsockopt(ClientSocket1.Socket.SocketHandle,  SOL_SOCKET, SO_RCVTIMEO, PChar(@timeout), sizeof(timeout));end;
      

  4.   

    记住:setsockopt必须要在ClientSocket1.Active = True中设置