Показать сообщение отдельно

  #22  
Старый 14.10.2009, 12:05
0rs
Познающий
Регистрация: 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..
 
Ответить с цитированием