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

  #7  
Старый 28.11.2009, 10:55
Proger10
Познающий
Регистрация: 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;
Если на порте кто-то есть, то все отлично программа вполне быстро сообщает об этом, а если там никого нет, то проходит секунд десять до соответствующего сообшения, попытался добаввить таймаут - нифига не получилось.. Что не так??
 
Ответить с цитированием