
14.10.2009, 12:05
|
|
Познающий
Регистрация: 30.12.2008
Сообщений: 64
С нами:
9138151
Репутация:
76
|
|
Сообщение от ErrorNeo
Так же буду благодарен если кто-либо покажет кусочек кода с образцом таймаута для connect.
На асме у меня такой код для таймаута работает:
Код:
LOCAL timeout: timeval
LOCAL fds: fd_set
LOCAL block: DWORD
;подключение
mov block, 1
invoke ioctlsocket, hSock, FIONBIO, addr block
invoke connect, hSock, addr sin, sizeof sin
mov block, 0
invoke ioctlsocket, hSock, FIONBIO, addr block
;таймаут
mov timeout.tv_sec, 3
mov timeout.tv_usec, 0
mov eax, 1
mov fds.fd_count, eax
mov eax, hSock
mov fds.fd_array, eax
invoke select, 0, addr fds, addr fds, 0, addr timeout
.if eax==0
invoke closesocket, hSock
mov eax, 5
ret
.endif
На дельфи вроде так будет выглядеть, но на работоспособность не проверял:
Код:
var
timeout: timeval;
fds: fd_set;
block: DWORD;
begin
block:=1;
ioctlsocket(hSock, FIONBIO, block);
connect(hSock, sin, sizeof (sin));
block:=0;
ioctlsocket(hSock, FIONBIO, block);
timeout.tv_sec:= 3;
timeout.tv_usec:= 0;
fds.fd_count:= 1;
fds.fd_array:= hSock;
if select(0, fds, fds, 0, timeout)=0 then
begin
\\Подключиться не удалось
end;
end;
Может быть стоит вообще поставить таймаут на поток, тогда не будет необходимости ставить таймауты на подключение, запись и чтение.
А имеет ли вообще смысл чекать прокси? Может быть лучше перед началом работы заносить все прокси в список или массив sockaddrin, а во время выполнения основного функционала (например проверка акков на валидность) занулять или удалять из списка нерабочие.
Последний раз редактировалось 0rs; 14.10.2009 в 12:10..
|
|
|