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