Задержаться на тайм-аут, не сбросить данные?
Я установил опцию 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?