2011-02-18 14 views
5

Socket.Disconnect(bool reuse) według MSDN włącza się do ponownego wykorzystania gniazda. Moje pytania to:Socket.Disconnect (bool ponowne)

  1. Jeśli zdecydujemy się na ponowne użycie gniazda, czy to oznacza, że ​​będzie on ponownie używać tego samego lokalnego punktu końcowego? Czy zachowałby port dla tego gniazda, czy też po prostu (nie wierzę), że zachowuje wszystkie zasoby obiektów?

  2. Jeśli faktycznie zapisuje tylko zasoby, zostaną one przydzielone do następnego połączenia, a jeśli tak, czy bufory wysyłania/odbierania będą automatycznie spłukiwane, czy jest jakiś sposób ich przepłukać? Czy Socket.ShutDown(ShutDown.Both) zrobić to dla mnie na rozłączenie?

  3. W jakiej sytuacji użyłbym Socket.Disconnect(false)? Jeśli cały cel polega na ponownym wykorzystaniu gniazda, co by mi to dało?

+0

Wiem, że to nie odpowiada wprost na twoje pytania, ale ta odpowiedź daje więcej szczegółów na temat różnych zachowań między zamknięciem gniazda .NET, a tym, jaki wpływ ma na gniazdo na poziomie Windows: http: // stackoverflow.com/questions/2014887/socket-close-doesnt-really-close-tcp-socket-c w najlepszym razie wydaje się, że nie byłoby zagwarantowane inny punkt końcowy, po prostu dzwoniąc Shutdown i zamknij na obiekcie gniazda. – JNadal

Odpowiedz

5
  1. Jeśli ponowne = False gniazdo będzie umieszczone automatycznie po zamknięciu. Wszystkie ustawienia w rozmiarach EndPoint i Buffer nie są resetowane do wartości domyślnych, ale możesz je zmienić, jeśli chcesz. Pod warunkiem, że użytkownik zdecyduje się zmienić port połączenia. Wystarczy zamknąć gniazdo, zmienić port i podłączyć gniazdo ponownie bez tworzenia nowego gniazda i skonfigurować ponownie.

  2. Socket.Shutdown prostu wyłącza wysyłanie/odbieranie/obu; nie odłączaj gniazda. Jednak dzieje się tak w przypadku nowych danych przychodzących/wychodzących, więc bufory zostaną przepłukane normalnie. Dobrą praktyką jest wywoływanie go przed odłączeniem, aby zapewnić, że wszystkie dane zostały wysłane i żadne dane nie są odbierane podczas rozłączania.

  3. Wracając do przykładu 1. supose trzeba zmienić tylko port. Nie chcesz, aby ponownie utworzyć gniazdo, należy skonfigurować wszystkie parametry gniazda jako zdarzeń i buforów ponownie itd Zużywa czasu i zasobów, więc lepiej jest użyć ponownie gniazdo już masz.