Доброго времени суток!
Изучение работы неблокирующих сокетов решил начать с написания простенького прокси-чекера, позволяющего определить статус соединения с тем или иным прокси.
Код:
var
data : twsadata;
sock : array [0..9] of tsocket;
addr : tsockaddr;
blck : u_long;
i : integer;
t : timeval;
begin
blck := 1;
wsastartup ($101, data);
for i := 0 to 9 do
begin
sock[i] := socket (AF_INET, SOCK_STREAM, 0);
while sock[i] = INVALID_SOCKET do sock[i] := socket (AF_INET, SOCK_STREAM, 0);
ioctlsocket (sock[i], FIONBIO, blck);
addr.sin_family := AF_INET;
addr.sin_addr.s_addr := inet_addr (pansichar ('{proxy adress}'));
addr.sin_port := htons ({proxy port});
connect (sock[i], addr, sizeof (addr));
end;
sleep (1000);
for i := 0 to 9 do closesocket (sock[i]);
wsacleanup;
end;
Задача:
- загрузить 10 прокси в один поток
- попытаться соединиться с каждым в неблокирующем режиме
- через N времени проверить открытые сокеты на предмет того, есть ли соединение, или прокси мертв
Третий пункт решить не получается, прошу помощи.
Грубо говоря, я представляю это так:
for i := 0 to 9 do // проверка sock[i];
Но как сделать - не понимаю.
Заранее спасибо за ответы.