El *_*psa 6 python sockets udp
我试图找出/调整网络缓冲区的大小:
import socket
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.getsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF)
212992
Run Code Online (Sandbox Code Playgroud)
这究竟是什么?~0.2 MBytes ..!?
但是,如果我在其他地方寻找缓冲区大小,即在命令行上:
sampsa@sampsa-xps13:~/python/sockets$ cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304
Run Code Online (Sandbox Code Playgroud)
..我得到4096字节.
让我们尝试设置缓冲区大小,然后检查它的值:
sock.setsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF,1024)
sock.getsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF)
2304
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
用SOL_UDP替换SOL_SOCKET会出现"Protocol not available"
我怎样才能调整最大值 UDP数据包的大小..甚至找到它?
我想说,如何找出/调整缓冲区的大小
你的做法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.
Run Code Online (Sandbox Code Playgroud)
顺便说一句,网络套接字是 FIFO 吗?先入 - 当缓冲区饱和时首先丢弃?
据我所知,如果缓冲区已满,接收将会失败。它不会丢弃已接收但未处理的数据来为新数据腾出空间。
| 归档时间: |
|
| 查看次数: |
7550 次 |
| 最近记录: |