2010世界杯主题曲_世界杯非洲预选赛 - fsyxyy.com

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

社区首页 >问答首页 >如何在python的socket recv方法上设置超时?问如何在python的socket recv方法上设置超时?ENStack Overflow用户提问于 2010-04-27 13:51:47回答 10查看 280.7K关注 0票数 150我需要在python的socket recv方法上设置超时。该怎么做呢?

pythonsocketstimeout关注问题分享EN回答 10推荐最新Stack Overflow用户发布于 2010-04-27 21:49:30

典型的方法是使用select()等待,直到数据可用或超时。只有在数据实际可用时才调用recv()。为了安全起见,我们还将套接字设置为非阻塞模式,以保证recv()永远不会无限期地阻塞。select()还可用于同时等待多个套接字。

代码语言:javascript复制import select

mysocket.setblocking(0)

ready = select.select([mysocket], [], [], timeout_in_seconds)

if ready[0]:

data = mysocket.recv(4096)如果您有很多打开的文件描述符,那么poll()是比select()更有效的替代方案。

另一种选择是使用socket.settimeout()为套接字上的所有操作设置超时,但我看到您在另一个答案中明确拒绝了该解决方案。

收藏分享票数 141ENStack Overflow用户发布于 2010-04-27 13:56:31

这是socket.settimeout()

收藏分享票数 72ENStack Overflow用户发布于 2014-08-28 01:15:52

如前所述,select.select()和socket.settimeout()都可以工作。

注您可能需要调用settimeout两次,例如

代码语言:javascript复制sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.bind(("",0))

sock.listen(1)

# accept can throw socket.timeout

sock.settimeout(5.0)

conn, addr = sock.accept()

# recv can throw socket.timeout

conn.settimeout(5.0)

conn.recv(1024)收藏分享票数 52EN查看全部 10 条回答页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持原文链接:https://stackoverflow.com/questions/2719017

复制相关文章

密码锁防盗门怎么开
【路由器】指示灯介绍


最新发表

友情链接