Я разрабатываю два приложения на С++, которые используют вызовы сокетов C Linux, сервер и клиент. Сервер прослушивает определенный порт A и получает соединение, используя функцию accept. Я использую int result = ::listen(mySocketFileDescriptor, 1); ограничение максимального количества подключений до 1. Кстати, на сервере я использую параметр SO_REUSEADDR для повторного использования сокета по другим причинам.
Если есть несколько отключений/подключений от клиента, иногда происходит странное поведение: например, клиент успешно подключается к серверу, но затем, когда он отправляет данные, сервер ничего не получает.
В клиентском приложении я подключаюсь к порту A, используя автоматически назначенный порт Linux, назовем его B. Используя netstat, я обнаружил, что клиент подключен к серверу через порт A как из сокета, который использует порт B и от другого, использующего другой порт C. Я отлаживал и видел, что сервер читает из сокета, который использует B, в то время как клиент пишет в сокет, который использует C.
Любая идея о причине такого поведения?
Помимо любой возможной логической проблемы, которая может возникнуть в моем коде, возможно ли заставить сервер всегда отбрасывать старое соединение при установке нового? есть ли какая-либо опция, которую я могу установить на нем?
Заранее спасибо!