我在Python中有一个名为sock
的非阻塞套接字。根据我的理解,recv()
方法应该在对等方关闭连接时引发异常,但它返回空字符串(''
),我不知道原因。
这是我用(来自here)测试的脚本:
import sys
import socket
import fcntl, os
import errno
from time import sleep
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1',9999))
fcntl.fcntl(s, fcntl.F_SETFL, os.O_NONBLOCK)
while True:
try:
msg = s.recv(4096)
print("got data '{msg}'".format(msg=msg))
except socket.error, e:
err = e.args[0]
if err == errno.EAGAIN or err == errno.EWOULDBLOCK:
sleep(1)
print 'No data available'
continue
sys.exit(1)
如果对等方关闭连接,则此套接字应该在recv()
上提升socket.error
,但它只返回''
。
我用两个终端来测试它:
# Terminal 1
~$ nc -l -p9999
# Terminal 2
~$ python ./test_script.py
# Terminal 1
typingsomestring
# Terminal 2
No data available
No data available
No data available
got data 'typingsomestring
'
No data available
No data available
# Terminal 1
Ctrl+C # (killing nc)
# Terminal 2
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
got data ''
目前没有回答
相关问题 更多 >
编程相关推荐