2013-06-10 3 views
2

Я пишу несколько приложений, которые общаются с сетью, используя Boost.ASIO. Неожиданно два из них получили один и тот же порт в конфигурации из-за ошибки, и оба из них успешно начали прослушивание в том же порту. Вот от netstat -na выходаКак два приложения могут прослушивать один порт?

TCP 0.0.0.0:40000 0.0.0.0:0 СЛУШАЯ
TCP 0.0.0.0:40000 0.0.0.0:0 СЛУШАЯ

Как это может быть так? Два разных приложения используют один и тот же TCP-порт!

+0

Вы можете посмотреть здесь http://stackoverflow.com/questions/1694144/can-two-applications-listen-to-the-same-port –

+0

Как вы видите, оба являются TCP, а не UDP. Я ожидал, что второе приложение получит исключение, но оно успешно начало прослушивание. – flashnik

ответ

2

Это возможно, если сокет был открыт с флагом SO_REUSEADDR на Windows. К сожалению, флаг SO_REUSEADDR имеет разную семантику в Windows, чем на * nix, что позволяет это поведение.

Если вы беспокоитесь, что другое приложение может попытаться прослушать порт, который вы используете, вы можете использовать флаг SO_EXCLUSIVEADDRUSE. Если вы контролируете все открывающие сокеты приложения, убедитесь, что вы не используете флаг SO_REUSEADDR.

Смежные вопросы