Здравствуйте, такая проблема, в программе не работает тайм аут на соединение, если порт закрыт сокет очень долго ждёт ответа. Вот код.
| Код | 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"? |