IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   сокеты: таймаут при соеденении (https://www.imho.ws/showthread.php?t=36304)

mozarttt 10.08.2003 20:02

сокеты: таймаут при соеденении
 
Кто нибудь скажет как задать таймаут на соединение сокета?

Pirog 10.08.2003 20:18

Ну а на чем ты пишеш то ?
вобщем скажу на Perl это
Timeout => **,

mozarttt 10.08.2003 20:23

Pirog
winapi под дельфей, то бишь вопрос по винсоку..

зы: в принципе соеденение в отдельном потоке создается, так что можно поток по таймауту грохать, но мне кажется, что есть более удачное решение...

BigFoot 14.08.2003 17:26

mozarttt
В хелпе msdn я не нашел установки таймаута для сокета. В ф-ции SetSocketOption можно поставить timeout Send'a и Receive'a, а Connection'a нету... :(

mozarttt 14.08.2003 19:27

BigFoot
я весь инет излазил, все пишут на connect() нельзя таймаут изменить (типа это жутко глобальный параметр), но нашел другое решение. Правда нужен винсок2:

var
WSAData: TWSAData;
FSocket: TSocket;
addr: TSockAddr;
hEvent: THandle;
fset: TFDSet;
tv: TTimeVal;
s, opt: Integer;
host: string;
port: Integer;
tmout: Integer;
begin
host := '127.0.0.1';
port := 21;
tmout := 3; // <<<---- вот он собака!

if WSAStartup(MAKEWORD(2, 0), WSAData) = 0 then
begin
addr.sin_family := AF_INET;
addr.sin_addr.S_addr := inet_addr(pchar(host));
addr.sin_port := htons(port);
hEvent := WSACreateEvent;
FSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if FSocket <> INVALID_SOCKET then
begin
WSAEventSelect(FSocket, hEvent, FD_WRITE + FD_CONNECT);
connect(FSocket, @addr, sizeof(addr));
if WSAGetLastError() <> WSAEINPROGRESS then
begin
FD_ZERO(fset);
FD_SET(FSocket, fset);
tv.tv_sec := tmout;
tv.tv_usec := 0;
select(1, nil, @fset, nil, @tv);
if FD_ISSET(FSocket, fset) then
begin
s := Sizeof(Opt);
opt := 1;
getsockopt(FSocket, SOL_SOCKET, SO_ERROR, @opt, s);
if opt = 0 then ....; //рулез - порт открыт!
end;
CloseSocket(FSocket);
end;
WSACloseEvent(hEvent);
end;
WSACleanup;
end;
end;

BigFoot 15.08.2003 09:44

mozarttt
Тоже вариант. А чем тебе вторые сокеты не нравятся? Планируешь прогу запускать под win3.11 или win95 не osr2?

mozarttt 17.08.2003 04:51

BigFoot
всем нравится. Это я написал для тех кто сам не впетрит откуда такие функции берутся


Часовой пояс GMT +4, время: 16:30.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.