Sockets gevent tcp套接字已断开连接,但可以发送数据
我有一个使用gevent编写的小型HTTP服务器,它接受传入的连接,并使用每连接greenlet发回数据。当(本地)客户端死亡时,尽管套接字处于关闭等待状态,服务器端对客户端的写入仍会成功:Sockets gevent tcp套接字已断开连接,但可以发送数据,sockets,gevent,Sockets,Gevent,我有一个使用gevent编写的小型HTTP服务器,它接受传入的连接,并使用每连接greenlet发回数据。当(本地)客户端死亡时,尽管套接字处于关闭等待状态,服务器端对客户端的写入仍会成功: $ ls -l /proc/21860/fd |grep 22 lrwx------. 1 mathieu mathieu 64 Mar 21 19:55 22 -> socket:[187093] $ lsof |grep 187093 python 21860 mathieu
$ ls -l /proc/21860/fd |grep 22
lrwx------. 1 mathieu mathieu 64 Mar 21 19:55 22 -> socket:[187093]
$ lsof |grep 187093
python 21860 mathieu 22u IPv4 187093 0t0 TCP localhost.localdomain:36072->localhost.localdomain:48908 (CLOSE_WAIT)
现在,我希望我用gevent.socket.socket创建的套接字的send方法失败并出现异常,但我没有得到任何异常
def send(socket, data):
sent = socket.send(data)
while sent != len(data):
data = data[sent:]
sent = socket.send(data)
我的期望不正确吗?如果没有,这里会出什么问题?经过一段时间的调试后,我对socket API在TCP之上的行为的预期是不正确的。潜在读者可能希望仔细阅读 要带走的东西: