Задержаться на тайм-аут, не сбросить данные?

Я установил опцию 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?

0 ответов

Другие вопросы по тегам