相关疑难解决方法(0)

如何在python的socket recv方法上设置超时?

我需要在python的socket recv方法上设置超时.怎么做?

python sockets timeout

100
推荐指数
8
解决办法
20万
查看次数

当非阻塞套接字上的连接断开时,`sock.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.errorrecv()但它只返回''

我使用两个终端以这种方式进行测试:

# Terminal 1
~$ nc -l -p9999

# …
Run Code Online (Sandbox Code Playgroud)

python sockets python-2.7

7
推荐指数
2
解决办法
1万
查看次数

标签 统计

python ×2

sockets ×2

python-2.7 ×1

timeout ×1