一段用Socket连接的程序。(WSAStartup(MakeWord(1,1),WSA);)已经初始化了,
var
  Sock : TSocket;
  ErrorCode : integer;
  Server : TSockaddr;
begin
  Result := False;
  Server.sin_family:=AF_INET;
  Server.sin_port:=htons(Port);
  Server.sin_addr.S_addr:=inet_addr(pchar(IP));
  Sock:=Socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
  ErrorCode:=connect(Sock,Server,sizeof(Server));  //这个地方
  if ErrorCode<>invalid_socket then begin
//    Send(Sock,Buffer,6,0);
    Result := True;
  end;
  CloseSocket(Sock);
end;
我的问题就是:
  ErrorCode:=connect(Sock,Server,sizeof(Server));  //程序到这里之后,如果连接成功就会很快,但是如果连接不成功,这个地方就要等一些时候,在这个地方该怎么设置TimeOut?
谢谢。

解决方案 »

  1.   

    好象是setscokopt,设置各种socket信息的
      

  2.   

    来自 :Sachow 时间 :2002-04-30 09:55:00 
    //判断超时的函数,此函数加在客户端程序中,注意要引用WinSock单元 
    function RecvTimeOut(fd: Cardinal; sec: Word):Integer; 
    var 
    fs: TFDSet; 
    timeout: TTimeVal; 
    n: Integer; 
    begin 
    FD_ZERO(fs); 
    FD_SET(fd, fs); 
    timeout.tv_sec := sec; 
    timeout.tv_usec := 0; 
    n := Select(fd+1, @fs, nil, nil, @timeout); 
    Result := n; 
    end; //客户端发送代码 
    procedure TForm1.Button2Click(Sender: TObject); 
    var 
    Buf: array [0..255] of Char; 
    begin 
    Buf := &apos;shutdown&apos;; 
    ClientSocket1.Socket.SendBuf(Buf, SizeOf(Buf)); 
    if (RecvTimeOut(ClientSocket1.Socket.SocketHandle, 5)=0) then 
    begin 
    ShowMessage(&apos;发送超时!&apos;); 
    ClientSocket1.Close; 
    end; 
    end; //服务器端接收代码 
    procedure TForm1.ServerSocket1ClientRead(Sender: TObject; 
    Socket: TCustomWinSocket); 
    var 
    Buf: array [0..255] of Char; 
    begin 
    //延迟一定时间 
    Sleep(StrToInt(Edit1.Text)); 
    if (Socket.ReceiveBuf(Buf, SizeOf(Buf))>=SizeOf(Buf)) then 
    Memo1.Lines.Add(Buf); 
    Buf := &apos;执行成功&apos;; 
    Socket.SendBuf(Buf, SizeOf(Buf)); 
    end; 
     
      

  3.   

    楼上的兄弟,
    我用的是TSocket不是TCustomWinSocket。
      

  4.   

    呵呵,是不是想让程序等待一段时间?:)
    以前做过,现在忘了,去google搜索下吧!!!一般能找到
      

  5.   

    http://www.china-pub.com/computers/emook/wzq/068/info.htm