Поведение невыполненной работы сокета

В случае, если серверный сокет имеет полный запрос в своем отставании и выполняет длительную работу, как будет вести себя сокет. Когда я пытаюсь это сделать, из Windows telnet в порядке, он подключается. Но из unix выдает "отказ в соединении". Мое приложение написано на java и работает на IBM jvm. Кстати, я дошел до того, что наше приложение не отвечало по телнету от unix. Не отвечает, значит пишет "tyring..." и зависает, не отказываясь и не подключаясь. Кто-нибудь может оправдать такое поведение? Спасибо.


person cacert    schedule 03.12.2013    source источник


Ответы (1)


Вы не должны получать сообщение «Отказано в соединении», если сокет находится в состоянии LISTEN. Пока вы не исчерпаете слоты, предоставленные параметром невыполненной работы, ваши запросы на подключение должны быть подтверждены (но больше ничего не происходит). Когда вы достигаете предела невыполненной работы, установленного системным вызовом listen, "Попытка..." является нормальным поведением (сервер отбрасывает пакеты до тех пор, пока не станет доступным слот для прослушивания невыполненной работы, клиент повторно передает пакеты SYN до тех пор, пока не произойдет тайм-аут соединения или сервер подтверждает запрос на подключение).

person Laszlo Valko    schedule 03.12.2013
comment
Во первых спасибо за ответ. Когда я пытаюсь это сделать, сокет не принимает (например, он находится в точке останова ниже принятия) (отставание достигло предела). Я принял соединение с отказом. когда я смотрю с помощью netstat, я вижу свой порт в режиме прослушивания. Я никогда не мог сгенерировать попытку ... случай на моей машине, который я видел в случае проблемы в производстве раньше. - person cacert; 03.12.2013
comment
Это не должно быть на принятии. Чтобы начать получать соединения, нужны только bind и listen. Затем каждое входящее соединение принимается ОС и ставится в очередь до тех пор, пока это позволяет параметр невыполненной работы. Когда приложение достигает accept, оно будет получать уже принятые соединения из очереди по одному. - person Laszlo Valko; 03.12.2013
comment
Это поведение зависит от платформы. Windows выдает RST, когда отставание заполняется, что приводит к «отказу в соединении». Unix, Linux просто отбрасывают пакет SYN. - person user207421; 04.12.2013