Это включает в себя два автоматизированных модульных теста, каждый из которых запускает tcp / ip-сервер, который создает неблокирующий сокет, затем bind () s и listen () в цикле на select () для клиента, который подключается и загружает некоторые данные.
Суть в том, что они отлично работают при отдельном запуске, но при запуске в качестве набора тестов второй тестовый клиент не сможет соединиться с WSACONNREFUSED ...
UNLESS
между ними существует Thread.Sleep () из нескольких секунд ?? !!!
Интересно, что повторяющийся цикл повторяется каждую 1 секунду для подключения после любого сбоя. Таким образом, второй тест проходит некоторое время до истечения времени ожидания через 10 минут.
В течение этого времени netstat -na показывает, что правильный номер порта находится в состоянии LISTEN для сокета сервера. Так что, если он находится в состоянии прослушивания? Почему он не принимает соединение?
В коде есть сообщения журнала, которые показывают, что select НИКОГДА даже не получает готовый к считыванию сокет (что означает готовность принимать соединение, когда оно применяется к прослушивающему сокету).
Очевидно, что проблема должна быть связана с некоторым состоянием гонки между завершением одного теста, что означает close () и shutdown () на каждом конце сокета, и запуском следующего.
Это не было бы так плохо, если бы логика повторения позволила ему соединиться через пару секунд. Однако, похоже, что он «застрял» и даже не попытается.
Однако по какой-то странной причине прослушивающий сокет говорит, что находится в состоянии LISTEN, даже несмотря на то, что продолжает отказывать в соединениях.
Таким образом, это означает, что это операционная система Windoze, которая на самом деле перехватывает пакет SYN и возвращает пакет RST (что означает «Соединение отказано»).
Единственный раз, когда я видел эту ошибку, это когда в коде была проблема, из-за которой сотни сокетов застревали в состоянии TIME_WAIT. Но это не тот случай. netstat показывает только около дюжины сокетов с только 1 или 2 в TIME_WAIT в любой данный момент.
Пожалуйста, помогите.