Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > winsock Не работает TimeOut


Автор: DeSx86 17.3.2013, 11:19
Здравствуйте, такая проблема, в программе не работает тайм аут на соединение, если порт закрыт сокет очень долго ждёт ответа.
Вот код.
Код

  begin
  TimeOut:=2000;

  ip:=(IntToStr(h)+'.'+IntToStr(c)+'.'+IntToStr(j)+'.'+IntToStr(i));
         if WSAStartup($101,D)<>0 then
          begin
            ShowMessage('error..');
            exit;
          end;

        Form2.StatusBar1.Panels[0].Text:=ip;
        A.sin_family:=AF_INET;
  A.sin_addr.S_addr:=inet_addr(pchar(ip));
  S:=socket(AF_INET,SOCK_STREAM,0);
    if S=INVALID_SOCKET then  Form2.Memo1.Lines.Add('socket error');
        A.sin_port:=htons(StrToInt(Form2.Edit9.Text));
        setsockopt(S, SOL_SOCKET, SO_RCVTIMEO, @TimeOut, SizeOf(TimeOut));
        setsockopt(S, SOL_SOCKET, SO_SNDTIMEO, @TimeOut, SizeOf(TimeOut));
    if connect(S,A,sizeof(A))=0 then
        Form2.Memo1.Lines.Add(ip+':'+Form2.Edit9.Text+' On')

    else
    Form2.Memo1.Lines.Add(ip+':'+Form2.Edit9.Text+' Off');
    end;


Что сделать, что если сервер не ответил в течении 2х секунд брался следующий ip, а этот получал статус "Off"?

Автор: Чучмек 17.3.2013, 14:12
DeSx86,  читай внимательней.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740560%28v=vs.85%29.aspx
Код

var
  timeout:TTimeVal;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)