我有一种情况,客户端在设置一些IP TOS值(setsockopt(.., IP_TOS, ..)
)后打开与服务器的TCP连接。在服务器上,我想检索接收到的TOS值并将其设置在套接字上,以便将接收到的TOS反射(reflect)回服务器上-客户端数据包。
问题是,在服务器端,如何检索从客户端收到的TOS值?我可以假设客户端在整个 session 期间不会更改TOS值,因此一开始就获取并设置TOS值就足够了。
设置IP_RECVTOS
并使用辅助数据适用于UDP,但不适用于TCP套接字。如何在TCP套接字上实现类似的功能?带有getsockopt(2)
或SO_PRIORITY
的IP_TOS
返回本地套接字上的配置值。因此,如果我在本地执行setsockopt()
,那么getsockopt()
会反射(reflect)该值。它不能反射(reflect)网络上收到的内容。
最佳答案
对于每个收到的TCP数据报,TOS值可能会更改。
因此,它不是接收 TCP套接字的恒定选项。
从后一种情况可以得出结论,就选项而言,接收者不可能从接收TCP套接字中提取TOS值,而该选项的值可以使用getsockopt()
读取。
由于没有类似“辅助消息”之类的功能可用于TCP,因此我看到找出发送者设置为TOS的唯一方法是直接检查接收到的TCP数据报的 header 。