我需要在python的socket recv方法上设置超时.怎么做?
我在 Python 中有一个名为 的非阻塞套接字sock。根据我的理解,recv()如果连接已被对等方关闭,该方法应该引发异常,但它返回一个空字符串(''),我不知道为什么。
这是我测试的脚本(来自这里):
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)
Run Code Online (Sandbox Code Playgroud)
如果对等方关闭连接,则此套接字应该引发socket.error,recv()但它只返回''。
我使用两个终端以这种方式进行测试:
# Terminal 1
~$ nc -l -p9999
# …Run Code Online (Sandbox Code Playgroud)