Mam aplikację opartą na serwerze Winsock, która korzysta z portów wejścia/wyjścia Windows Winsock.Winsock - przestań akceptować nowe połączenia, ale zachowaj łączność z istniejącymi połączeniami
Jako takie, każde akceptowane połączenie jest powiązane z gniazdem nasłuchowym, aby rozpocząć odbieranie powiadomień (odczyt, zapis, zamknięcie itp.).
Gniazdo nasłuchu ma zaległości w postaci 100 oczekujących połączeń.
Wszystko jest dobrze.
W pewnym momencie chcę przestać akceptować nowe połączenia, ale utrzymywać komunikację z już podłączonymi istniejącymi połączonymi gniazdami.
wyobraziłem mogłem zrobić jeden:
- Stop Calling WSAAccept().
- Ustawia zaległości na zero, skutecznie uniemożliwiając połączenie z penderem.
- Wyłączenie połączenia() & closesocket() na gnieździe nasłuchującym.
Teraz opcja # 1 daje oczekiwane wyniki; Moja aplikacja nie przetwarza nowych połączeń, ALE akceptuje do kwoty zaległości (100). Połączenia są praktycznie wykonane - nie chcę tego!
Opcja nr 2; Czy mogę to zrobić? W jaki sposób? Nie można znaleźć w witrynie MSDN ani w google. Dokumentacja listen() w MSDN mówi;
Jeśli funkcja nazywa się słuchać na gniazda już słuchania, to będzie sukces powrót bez zmiany wartości parametru zaległości. Ustawienie parametru backlog na 0 w kolejne wywołanie funkcji nasłuchiwania na gnieździe nasłuchowym nie jest uważane za prawidłowy reset, szczególnie jeśli istnieją połączenia w gnieździe.
Niedobrze dla mnie.
Gdybym mógł to zrobić w bezpieczny sposób, połączyłbym go z opcją nr 1, skutecznie przerywając tworzenie nowych połączeń na komputerze (przez port nasłuchiwania!).
Opcja nr 3 faktycznie działa; Po zamknięciu gniazda nasłuchującego nadal mogę komunikować się z istniejącymi połączeniami, a zaległości już nie ma (dobrze, zamknij gniazdo nasłuchu!).
Obawiam się, że takie podejście może mieć pewne skutki uboczne. Czy ktoś może potwierdzić?
Tak, nr 3 jest właściwą odpowiedzią. –
Doskonała odpowiedź!"Dowód" jest dokładnie tym, czego potrzebowałem dla spokoju ducha !! Widzisz, obawiałem się, że skojarzenie nowo zaakceptowanego połączenia z gniazdem nasłuchowym IOCP stworzy pewną zależność. Jeszcze raz dziękuję! – Poni