
28.11.2009, 10:55
|
|
Познающий
Регистрация: 19.12.2008
Сообщений: 78
С нами:
9154741
Репутация:
13
|
|
Вот попытался сделать через winsAck:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
WSAData: TWSAData;
S: TSocket;
SockAddrIn: TSockAddr;
Timeout: TTimeVal;
begin
if WSAStartup($101, WSAData)<>0 then
exit;
SockAddrIn.sin_family:=AF_INET;
SockAddrIn.sin_addr.S_addr:=inet_addr(pchar(Edit1.Text));
S:=socket(AF_INET,SOCK_STREAM,0);
if S=INVALID_SOCKET then
Exit;
Timeout.tv_usec := 0;
Timeout.tv_sec := 1000;
setsockopt(S, SOL_SOCKET, SO_RCVTIMEO, @Timeout, sizeof(TTimeVal));
SockAddrIn.sin_port:=htons(StrToInt(Edit2.Text));
if connect(S, SockAddrIn, sizeof(SockAddrIn))=0 Then
begin
ShowMessage('Тут кто-то есть!');
end
else
begin
ShowMessage('Никого нет!');
end;
end;
Если на порте кто-то есть, то все отлично программа вполне быстро сообщает об этом, а если там никого нет, то проходит секунд десять до соответствующего сообшения, попытался добаввить таймаут - нифига не получилось.. Что не так??
|
|
|