Задержаться на тайм-аут, не сбросить данные? - PullRequest
0 голосов
/ 18 марта 2019

Я установил параметр SO_LINGER на:

sockfd.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', 1, 5))

Затем проверьте состояние сокета:

[root@localhost project]# ss -apn | grep 6666
tcp    LISTEN     0      5         *:6666                  *:*                   users:(("ipython",pid=35228,fd=13))
tcp    ESTAB      1152   0      127.0.0.1:40480              127.0.0.1:6666                users:(("ipython",pid=30818,fd=13))
tcp    ESTAB      0      1148   127.0.0.1:6666               127.0.0.1:40480               users:(("ipython",pid=35228,fd=14))

Я вижу 1148 байтов в sockfd send_buf, затем я закрываю sockfd, вызывая sockfd.close () Как и ожидалось, через 5 секунд это возвращается, но без ошибки. В это время состояние sockfd превращается в FIN-WAIT-1, в то время как когда узел начинает читать, он может вернуть всего 1152и 1148 байтов. Разве это не только может прочитать 1152 байта?Разве это не sockfd просто отправляет RST вместо FIN?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...