gpt4 book ai didi

python - 在 Python 中读取 UDP 数据包的缓冲区大小

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

我正在尝试找出/调整网络缓冲区的大小:

import socket

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

sock.getsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF)
212992

这到底是什么? ~ 0.2 MBytes ..!?

但是,如果我在其他地方寻找缓冲区大小,即在命令行上:

sampsa@sampsa-xps13:~/python/sockets$ cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304

.. 我得到 4096 字节。

让我们尝试设置缓冲区大小,然后检查它的值:

sock.setsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF,1024)

sock.getsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF)
2304

这是怎么回事?

用 SOL_UDP 替换 SOL_SOCKET 给出“协议(protocol)不可用”

我怎样才能调整最大。 UDP 数据包的大小.. 甚至找出来?

最佳答案

I wanted to say, how to find out / adjust the size of the buffer

您使用 SO_RCVBUF 的方式是正确的。但请注意,根据您的设置和操作系统,您使用 getsockopt 返回的值可能与使用 setsockopt 返回的值不同。在 Linux socket(7) 上声明:

SO_RCVBUF
Sets or gets the maximum socket receive buffer in bytes. The kernel doubles
this value (to allow space for bookkeeping overhead) when it is set using
setsockopt(2), and this doubled value is returned by getsockopt(2).
The default value is set by the /proc/sys/net/core/rmem_default file, and
the maximum allowed value is set by the /proc/sys/net/core/rmem_max file.
The minimum (doubled) value for this option is 256.

And, btw, are the network sockets FIFO ? first in - first discarded when the buffer gets saturated?

据我所知,如果缓冲区已满,接收将失败。它不会丢弃已接收但未处理的数据以为新数据腾出空间。

关于python - 在 Python 中读取 UDP 数据包的缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28563518/

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