【发布时间】:2015-02-17 14:20:19
【问题描述】:
我正在尝试找出/调整网络缓冲区的大小:
import socket
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.getsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF)
212992
这到底是什么? ~ 0.2 MB ..!?
但是,如果我在其他地方寻找缓冲区大小,即在命令行上:
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_SOCKET 替换为 SOL_UDP 会给出“协议不可用”
如何调整最大值。 UDP数据包的大小..甚至找出来?
【问题讨论】:
-
RCVBUF 与 UDP 数据包的最大大小没有太大关系,但主要是在应用程序读取速度不够快时,在丢弃之前缓冲了多少数据。因此它是一个套接字属性,与 UDP 无关。 UDP 数据包的最大大小为 64k。
-
谢谢..嗯,嗯..这正是我想要说明的。我想说,如何找出/调整缓冲区的大小
-
而且,顺便说一句,网络套接字是 FIFO 吗? first in - 当缓冲区饱和时首先丢弃?