插座编程阻塞过程



我正在尝试在使用python中使用udp。

代码很简单

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(data_to_send, (host, port))
received_data = s.recvfrom(1024)

我的问题是,sendtorecvfrom阻止方法吗?也就是说,当我调用sentdo时,我的代码会停止并等待recvfrom,因为,我在Localhost上闲逛并测试客户端和服务器模型,并手动注入3和4秒的随机睡眠时间以模拟现实生活延迟,以及如果延迟有点高,我会得到ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

这些调用 may 阻止它们被执行的线程。

sendto如果您的OS内核的出站缓冲区已满,并且需要时间才能容纳您愿意发送的消息。sendto不会阻止,因为远程应用程序尚未调用recvfrom

recvfrom将阻止,直到您的操作系统内核的入站缓冲区有东西要读取。如果远程对等式尚未发送任何内容或尚未到达消息,recvfrom将阻止。

另外,您身边可能发生一些错误的配置。ConnectionResetError可能会发生,因为某处有防火墙。由于UDP没有连接和超时,延迟与问题无关。

最新更新