我正在尝试在套接字上设置TCP_WINDOW_CLAMP
选项
In [1]: import socket
In [2]: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
In [3]: sock.setsockopt(socket.SOL_SOCKET, socket.TCP_WINDOW_CLAMP, 1000000)
但是当我检查这个设置是否正确时,我总是得到一个值。
In [4]: sock.getsockopt(socket.SOL_SOCKET, socket.TCP_WINDOW_CLAMP)
Out[4]: 1
这是一些标志还是特殊值?
我在Ubuntu 14.04上运行Anaconda Python
$ python
Python 3.4.4 |Anaconda 2.3.0 (64-bit)| (default, Jan 11 2016, 13:54:01)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
答案 0 :(得分:0)
实际上,看起来这个文档很清楚,我在评论中发布的猜测是正确的 - 在tcp(7)手册页中,在TCP_WINDOW_CLAMP
的描述正上方它说:
要设置或获取TCP套接字选项,请调用getsockopt(2)以读取或setsockopt(2)以写入选项level参数设置为的选项
IPPROTO_TCP
。
所以你需要将socket.SOL_SOCKET
替换为socket.IPPROTO_TCP
(显然与socket.SOL_TCP
相同,至少在linux上 - 不确定它们之间的区别是什么)。现在你正在弄乱SOL_SOCKET
命名空间中与TCP_WINDOW_CLAMP
分配的编号相同的一些不相关的其他选项,因此结果非常混乱。