Код (Text): function ThreadServer(p: pointer): integer; var sock, s: TSocket; Addr: TSockAddr; AddrLen: Integer; Cond: BOOL; begin Addr.sin_family := AF_INET; Addr.sin_port := htons(integer(p)); Addr.sin_addr.S_addr := 0; sock := WSASocket(AF_INET, SOCK_STREAM, IPPROTO_IP, nil, 0, WSA_FLAG_OVERLAPPED); if sock = INVALID_SOCKET then FormatError('WSASocket'); if bind(sock, @Addr, sizeof(Addr)) <> 0 then FormatError('bind'); Cond := True; if setsockopt(sock, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, PChar(@Cond), sizeof(Cond)) <> 0 then FormatError('setsockopt'); if listen(sock, 65536) <> 0 then FormatError('listen'); while true do begin s := WSAAccept(sock, nil, nil, @TestClient, 0); if s = INVALID_SOCKET then FormatError('WSAAccept'); FormatDiag('New client'); CloseSocket(s); end; closesocket(sock); end; function TestClient(lpCallerId: LPWSABUF; lpCallerData : LPWSABUF; lpSQOS,lpGQOS : LPQOS; lpCalleeId,lpCalleeData : LPWSABUF; g : GROUP; dwCallbackData : DWORD ) : Integer; begin FormatDiag(' !!! TestClient'); Result := CF_REJECT; end; setsockopt устанавливаю, что моя функция TestClient будет вызвана до того как клиенту отправиться пакет на подтверждение соединения, что в принципе и происходит, но почему при отказе в соединении клиенту происходит вторичная выборка в очередь подключений? Т.е. функция вызывается два раза, собственно и функция WSAaccept тоже. С одной стороны использование такого метода должно снижать нагрузку на сеть (плюс не даст многократно переподключаться "особо умным"), но с другой стороны возрастет нагрузка на приложение. Ведь с учетом, что функция будет осуществлять сложную проверку (к примеру на совпадение IP по списку из нескольких тысяч клиентов) - придется 2 раза обрабатывать клиента. Может я чего-то не понимаю? Поясните плиз....