我试图在我的套接字上设置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)
然而,当我检查这个设置是否正确时,我总是得到一个1的值。
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
发布于 2016-10-23 18:32:38
实际上,这个文档看起来是清晰的,我在评论中提到的猜测是正确的--在tcp(7)手册页,就在TCP_WINDOW_CLAMP
描述的上面,上面写着:
若要设置或获取setsockopt选项,请调用getsockopt(2)读取,或调用setsockopt(2)将选项级别参数设置为
IPPROTO_TCP
编写该选项。
因此,您需要用socket.SOL_SOCKET
替换socket.IPPROTO_TCP
(这显然与socket.SOL_TCP
相同,至少在linux上是如此--不确定两者之间的区别是什么)。现在,您正在处理SOL_SOCKET
命名空间中的一些不相关的其他选项,这些选项的分配号码恰好与TCP_WINDOW_CLAMP
相同,因此结果非常混乱。
https://stackoverflow.com/questions/36519016
复制相似问题