Для чего используется SocketOptionName.ReuseAddress? - PullRequest
6 голосов
/ 04 мая 2010

Раньше я думал, что используя SocketOptionName.ReuseAddress, я могу повторно использовать порт, который находится в состоянии TIME_WAIT. Но я попытался поэкспериментировать с ним, и, похоже, это не имеет никакого эффекта.

Если я проверяю сокеты, используя netstat, и он показывает, что сокет находится в состоянии TIME_WAIT, и я немедленно снова запускаю клиент, я получаю исключение:

Обычно разрешено только одно использование каждого адреса сокета (протокола / сетевого адреса / порта) 172.16.16.16:12345

Я не могу ничего из этого сделать. Не могли бы вы уточнить, для чего подходит SocketOptionName.ReuseAddress?

1 Ответ

0 голосов
/ 04 мая 2010

Почему вы изначально привязываете свой клиентский порт? Вам, вероятно, не нужно, а если нет, то гораздо лучше позволить ОС выбрать для вас эфемерный порт, и тогда у вас не возникнет этой проблемы.

Во-вторых, почему вы думаете, что лучше использовать сокет, если он TIME_WAIT; государство существует по уважительной причине ...

Что касается того, почему это не работает для вас, посмотрите на ссылку, которую я разместил в ответ на этот похожий вопрос: При привязке клиентского TCP-сокета к определенному локальному порту с Winsock, SO_REUSEADDR не имеет никакого эффект

...