>а Вы попробуйте биндить клиент на рандомный порт.
>вполне возможно, что на трассе есть файервол с разбором tcp сессий, он
>то и может вносить смуту. Исходящий порт выбирается автоматически во время первого вызова connect(), он-то и используется при дальнейших коннектах данного экземпляра клиента. Естественно в каждой копии клиента будет свой уникальный исходящий порт.
Могу добавить еще, что такое наблюдается когда клиент (точнее tcp-стек на стороне клиента) ловит разрыв по таймауту, т.е. клиент данные отправляет-отправляет, но не получает tcp-ack от сервера. Если поймать момент, когда соединение стабильно и перезагрузить приложение-сервер, клиенту будет отправлен rst, и тогда клиент при перезапуске _устанавливает_ соединение (не сразу конечно, первые несколько попыток коннекта завершаются с CONNREFUSED, это понятно, сервер только стартует).
Получается, если "проблемный" фаервол/роутер не видит обратный rst-пакет, то непосредственно последующее соединение не устанавливается. Хотя там будет уже другой исходящий клиентский порт, и эти две сессии не должны пересекаться.
У меня есть доступ только к машинам с клиентом и сервером. Подскажите, что спросить у тех, кто занимается этим каналом связи? Они говорят, что у них все нормально с оборудованием. А я даже не знаю куда их носом ткнуть, чтобы они посмотрели...