套接字编程阻塞程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了套接字编程阻塞程序相关的知识,希望对你有一定的参考价值。
我试图在python中使用UDP之间创建一个套接字。
代码非常简单
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(data_to_send, (host, port))
received_data = s.recvfrom(1024)
我的问题是,sendto
和recvfrom
阻止了方法吗?也就是说,当我调用sentdo
时,我的代码将停止并等待recvfrom
,因为,我正在四处游荡并在我的localhost上测试客户端和服务器模型,并手动注入3和4秒的随机睡眠时间来模拟真实生活延迟,以及如果延迟有点高,我会得到ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
。
答案
这些调用可能会阻止它们正在执行的线程。
如果操作系统内核的出站缓冲区已满,则sendto
将阻塞,并且需要时间才能容纳您愿意发送的消息。 sendto
不会阻止,因为远程应用程序尚未调用recvfrom
。
recvfrom
将阻塞,直到从操作系统内核的入站缓冲区中读取内容。如果远程对等方没有发送任何内容或者消息尚未到达,recvfrom
将阻止。
此外,您可能会发生一些错误配置。 ConnectionResetError
可能会发生,因为某处有防火墙。延迟与问题无关,因为UDP没有连接和超时。
以上是关于套接字编程阻塞程序的主要内容,如果未能解决你的问题,请参考以下文章