Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > WSAAccept


Автор: qwe113 31.7.2008, 22:50
Здраствуйте всем. Функция WinSock 2 WSAAccept - как известно можт реализовывать условное подключение. Это делается вызовом callback фунции... и бля блябля :).

Это конечно все понятно. однако у меня функция обратного вызова даже не вызыввается, т.е. WSAAccept проходит отлично (я использую блокирующий режим сокетов), возвращает сокет нового подключения, однако функция callback Conditional не вызывается.
Вот код:
Код

..............
  Socket := Winsock2.socket(AF_INET, SOCK_STREAM, 0);
  if Socket = INVALID_SOCKET then
    raise Exception.CreateFmt('"socket" function failed. Code: %d',[WSAGetLastError]);

  Address.sin_family := AF_INET;
  Address.sin_port := htons(FPort);
  Address.sin_addr.S_addr := 0;

  if Bind(Socket, @Address, SizeOf(TSockAddr)) = SOCKET_ERROR then
    raise Exception.CreateFmt('"bind" function failed. Code: %d',[WSAGetLastError]);

  Cond := BOOL(1);
  SetSockOpt(Socket, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, @Cond, SizeOf(Cond));

  if winsock2.listen(Socket, SOMAXCONN) = SOCKET_ERROR then
    raise Exception.CreateFmt('"connect" function failed. Code: %d',[WSAGetLastError]);
  FActive := true;

  repeat
    while FConnections <> FMaxConn do
      begin
      Len := SizeOf(Address);
      Sock := WSAAccept(Socket, Address, @Len, @ConnectCond, dword(@Masks));
      if Sock <> INVALID_HANDLE_VALUE then AddConns(Sock, Address);
      Sleep(100);
      end;

  until false;


Ответьте пожалуйста на вопрос.

Автор: qwe113 2.8.2008, 07:29
Ну что такое? Неужели никто не отпишется???

Автор: qwe113 4.8.2008, 16:52
Спасибо за молчание smile.
Проблема решилась после такого как начал делать сокет функцией WSASocket.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)