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