Заранее извиняюсь, если моя терминология очень элементарна:
Я работаю с клиентом, который устанавливает TCP-соединение с сервером. Сокет клиента является неблокирующим, поэтому после вызова connect()
клиент ожидает, пока сокет не станет доступным для записи.
При accept()
подключении от клиента сервер выполняет операцию блокировки (назовите это функцией X) и не возвращается к блокировке при accept()
в течение длительного времени.
В течение этого времени, когда сервер занят выполнением функции X, клиент выполняет еще один connect()
для того же сервера, снова используя неблокирующий сокет (отличный от сокета, используемого при первом соединении), затем ждет, пока сокет не стать доступным для записи, чтобы считать TCP-соединение «установленным».
Я наивно ожидал, что второй сокет останется недоступным для записи, пока сервер не вызовет accept()
во второй раз, чтобы принять это второе соединение. Но я заметил, что это не так: второй сокет становится доступным для записи, поэтому клиент снова считает это новое соединение tcp «установленным».
Ожидается ли это?
Из одного из комментариев на этот вопрос я (очень слабо) понимаю, что неблокирующие сокеты, которые находятся в середине tcp-соединения, останутся недоступными для записи на время выполнения TCP-квитирования - Это правда? Это относится к вышеуказанному вопросу? Это что-то вроде: если существует существующее tcp-соединение от клиента к серверу, то последующие tcp-соединения от этого же клиента к тому же серверу немедленно / быстро «разрешаются» (сокет становится доступным для записи без явного сервера выполнение второго accept
)?
Что я пробовал :
Я пытался написать модульный тест для имитации этого сценария с одним потоком каждый для клиента и сервера, работающего на одном ПК, но я думаю это недопустимый способ тестирования: per эти вопросы и ответы Я думаю, что если клиент и сервер находятся на одном и том же ПК, «квитирование TCP» не совсем то же, что и на двух отдельных компьютерах, и, например, соединительный сокет клиента становится доступным для записи без сервера даже при прослушивании не говоря уже о о принятии соединения.