В приложении C ++ для Linux я вызываю socket (), bind () и listen (), чтобы создать сокет сервера. Обычно, если приложение запускается дважды (с одним и тем же портом сервера), во втором процессе bind () завершится с ошибкой EADDRINUSE. Однако теперь у меня есть случай, когда bind (), по-видимому, успешно завершился, но последующий вызов listen () вызвал ошибку EADDRINUSE ...
Это, вероятно, редкое состояние гонки, но мне все равно было бы интересно, в каких случаях может произойти, если второй bind () завершится успешно, а второй listen () - нет. Кто-нибудь знает больше о таком случае?
Это на 32-битном RHEL 5.3.