python - Python 2.7 server.socket 超时问题
问题描述
我有一些 python 代码有时会在打开连接但没有发送数据时阻塞。我明白为什么它在等待 64 位或更少的数据。它将永远等待。如果没有收到数据,是否有一种简单的方法可以使连接超时。任何帮助或建议将不胜感激。
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('', port))
serversocket.listen(5) # become a server socket, maximum 5 connections
while 1:
try:
while 1:
# print "Waiting for oonnection..."
connection, address = serversocket.accept()
buf = connection.recv(64)
解决方案
您可以使用socket.settimeout(value)
wherevalue
是秒数。
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('', port))
serversocket.listen(5) # become a server socket, maximum 5 connections
while 1:
try:
while 1:
# print "Waiting for oonnection..."
connection, address = serversocket.accept()
connection.settimeout(5) # Set 5 seconds timeout to receive 64 bytes of data
buf = connection.recv(64)
except socket.timeout:
print("Timeout happened -- goting back to accept another connection")
推荐阅读
- c# - 获取设备定位信息 google ads api 的问题
- c++ - 条件运算符的嵌套
- magento2 - 覆盖 \Magento\Payment\Block\Info\Cc 类的 _prepareSpecificInformation 方法
- node.js - NodeJS/Express - 查找发出请求的网站 IP
- reactjs - 以 excel/csv 格式导出材料 UI 表
- computational-geometry - 来自基本矩阵的姿势,变换的顺序
- cumulocity - 如何使用 Java SDK for Cumulocity Api 中的 MeasurementFilter 反转测量数据?
- huawei-mobile-services - 华为认证服务码:490 cse internal bad request
- msal - .NET Framework 中有没有办法通过 MSAL.net 实现 AAD 身份验证?
- javascript - 使用 setTimeout 延迟 API 调用