对于TCP_WINDOW_CLAMP,Python socket.getsockopt总是返回1

时间:2016-04-09 15:42:55

标签: python sockets

我正在尝试在套接字上设置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

1 个答案:

答案 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分配的编号相同的一些不相关的其他选项,因此结果非常混乱。