阅读量:6
要设置非阻塞模式,可以使用fcntl函数来设置套接字的属性。
以下是一个使用recvfrom设置非阻塞的示例:
import socket
import fcntl
import os
# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定地址和端口
sock.bind(('127.0.0.1', 8888))
# 设置非阻塞模式
fcntl.fcntl(sock, fcntl.F_SETFL, os.O_NONBLOCK)
# 接收数据
try:
data, addr = sock.recvfrom(1024)
except socket.error as e:
if isinstance(e.args, tuple):
if e == socket.error(errno.EWOULDBLOCK):
# 表示没有数据可读
pass
else:
print(e)
else:
# 处理接收到的数据
print('Received:', data.decode())
# 关闭套接字
sock.close()
在上述示例中,使用fcntl.fcntl函数将套接字的属性设置为非阻塞模式。这样,在调用recvfrom方法时,如果没有数据可读取,会立即返回一个错误。通过捕获socket.error异常并检查错误代码,可以判断是否是非阻塞模式下的超时情况。
以上就是关于“怎么使用recvfrom设置非阻塞”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm