denjf
19.05.2010, 22:08
block:=1;
sock:=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if sock=LongWord(-1) then exit;
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_port := htons(strtoint(PROXY_PORT));
SockAddrIn.sin_addr.s_addr := inet_addr(Pansichar(PROXY_IP));
ioctlsocket(sock, FIONBIO, block); // переводим сокет в неблокируемый режим
if connect(sock, SockAddrIn, SizeOf(SockAddrIn))=SOCKET_ERROR then // пытаемся подключиться
begin
if WSAGetLastError=WSAEWOULDBLOCK then // проверяем что сокет перешел в неблокируемый режим
begin
FD_ZERO(fds);
FD_SET(sock,fds);
timeout.tv_sec:=strtoint(form1.Edit1.Text); // наш таймаут
timeout.tv_usec:=0;
rc:=select(0, nil, @fds, nil, @timeout); // ожидаем
end;
end;
block:=0;
ioctlsocket(sock, FIONBIO, block); // переводим сокет обратно в блокируемый режим
if rc=0 then
begin
// сработал таймаут
synchronize(showresultbad);
end
else
begin
брал от сюда https://forum.antichat.ru/thread178458.html
Нашел на форуме пример таймаута для сокетов.
Но что то глючно работает. Не срабатывает на тормазнутых соксах.
sock:=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if sock=LongWord(-1) then exit;
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_port := htons(strtoint(PROXY_PORT));
SockAddrIn.sin_addr.s_addr := inet_addr(Pansichar(PROXY_IP));
ioctlsocket(sock, FIONBIO, block); // переводим сокет в неблокируемый режим
if connect(sock, SockAddrIn, SizeOf(SockAddrIn))=SOCKET_ERROR then // пытаемся подключиться
begin
if WSAGetLastError=WSAEWOULDBLOCK then // проверяем что сокет перешел в неблокируемый режим
begin
FD_ZERO(fds);
FD_SET(sock,fds);
timeout.tv_sec:=strtoint(form1.Edit1.Text); // наш таймаут
timeout.tv_usec:=0;
rc:=select(0, nil, @fds, nil, @timeout); // ожидаем
end;
end;
block:=0;
ioctlsocket(sock, FIONBIO, block); // переводим сокет обратно в блокируемый режим
if rc=0 then
begin
// сработал таймаут
synchronize(showresultbad);
end
else
begin
брал от сюда https://forum.antichat.ru/thread178458.html
Нашел на форуме пример таймаута для сокетов.
Но что то глючно работает. Не срабатывает на тормазнутых соксах.