gpt4 book ai didi

python - python 的 recvfrom() 队列数据包吗?

转载 作者:太空狗 更新时间:2023-10-30 03:04:00 25 4
gpt4 key购买 nike

我的印象是 recvfrom() 给了你它正在监听的 IP 和端口上的下一个数据包,如果它没有监听数据包就会丢失。我们遇到一个问题,问题可能是数据包排队等候 recvfrom(),因此它正在监听并捕获所有数据包,即使 recvfrom() 没有主动监听。

我找不到这方面的权威文档。有人确定 recvfrom() 的特性是在不被调用时不排队数据包吗?

代码示例:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

mcast_g = socket.inet_aton(group)
mreq = struct.pack('4sL', mcast_g, socket.INADDR_ANY)
s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

s.bind(('', port))

while True:
data, sender = s.recvfrom(1500)
# Do stuff
# Are packets being queued up here?

最佳答案

内核中有一个套接字接收缓冲区。 recv() 和 friend 从缓冲区中读取,或者在缓冲区为空时阻塞。如果您读取的速度不够快,缓冲区就会填满,缓冲区满时到达的 UDP 数据报将被丢弃。您可以使用套接字选项 SO_RCVBUFSIZE 来改变缓冲区的大小。

关于python - python 的 recvfrom() 队列数据包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17304252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com