Tôi đang viết một mô-đun Python đang giao tiếp với một chương trình đi qua các khe cắm unix. Máy khách (mô đun python) ghi dữ liệu vào socket và máy chủ tiêu thụ chúng.Ổ cắm Python đóng trước khi tất cả dữ liệu đã được tiêu thụ bởi điều khiển từ xa
# Simplified version of the code used
outputStream = socket.socket(socketfamily, sockettype, protocol)
outputStream.connect(socketaddress)
outputStream.setblocking(True)
outputStream.sendall(message)
....
outputStream.close()
Vấn đề của tôi là khách hàng Python có xu hướng để kết thúc và đóng ổ cắm trước khi dữ liệu đã được đọc một cách hiệu quả bởi các máy chủ dẫn đến một "đường ống bị hỏng, Connection reset by peer" ở phía máy chủ. Bất cứ điều gì tôi làm, cho mã Python tất cả mọi thứ đã được gửi đi và do đó các cuộc gọi đến send() sendall() select() đều thành công ...
Cảm ơn trước
EDIT: Tôi không thể sử dụng tắt máy vì mac OS
EDIT2: tôi cũng đã cố gắng để loại bỏ thời gian chờ và gọi setblocking (True) nhưng nó không thay đổi bất cứ điều gì
EDIT3: Sau khi đã sẵn sàng vấn đề này http://bugs.python.org/issue6774 có vẻ như rằng các tài liệu là không cần thiết đáng sợ vì vậy tôi đã khôi phục việc tắt máy nhưng vẫn gặp sự cố tương tự:
# Simplified version of the code used
outputStream = socket.socket(socketfamily, sockettype, protocol)
outputStream.connect(socketaddress)
outputStream.settimeout(5)
outputStream.sendall(message)
....
outputStream.shutdown(socket.SHUT_WR)
outputStream.close()