【发布时间】:2015-08-17 16:44:41
【问题描述】:
我正在编写一个 Python 模块,它通过 unix 套接字与 go 程序进行通信。客户端(python 模块)向套接字写入数据,服务器使用它们。
# Simplified version of the code used
outputStream = socket.socket(socketfamily, sockettype, protocol)
outputStream.connect(socketaddress)
outputStream.setblocking(True)
outputStream.sendall(message)
....
outputStream.close()
我的问题是 Python 客户端倾向于在服务器有效读取数据之前完成并关闭套接字,这会导致服务器端出现“管道损坏,对等连接重置”。无论我做什么,对于 Python 代码,一切都已发送,因此对 send() sendall() select() 的调用都成功了......
提前致谢
编辑:由于 mac OS,我无法使用关机
EDIT2:我也尝试删除超时并调用 setblocking(True) 但它没有改变任何东西
EDIT3:在准备好这个问题http://bugs.python.org/issue6774之后,似乎文档是不必要的可怕所以我恢复了关机,但我仍然有同样的问题:
# 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()
【问题讨论】: