我有一种情况,客户端在设置一些IP TOS值(setsockopt(.., IP_TOS, ..))后打开与服务器的TCP连接。在服务器上,我想检索接收到的TOS值并将其设置在套接字上,以便将接收到的TOS反射(reflect)回服务器上-客户端数据包。

问题是,在服务器端,如何检索从客户端收到的TOS值?我可以假设客户端在整个 session 期间不会更改TOS值,因此一开始就获取并设置TOS值就足够了。

设置IP_RECVTOS并使用辅助数据适用于UDP,但不适用于TCP套接字。如何在TCP套接字上实现类似的功能?带有getsockopt(2)SO_PRIORITYIP_TOS返回本地套接字上的配置值。因此,如果我在本地执行setsockopt(),那么getsockopt()会反射(reflect)该值。它不能反射(reflect)网络上收到的内容。

最佳答案

对于每个收到的TCP数据报,TOS值可能会更改。

因此,它不是接收 TCP套接字的恒定选项。

从后一种情况可以得出结论,就选项而言,接收者不可能从接收TCP套接字中提取TOS值,而该选项的值可以使用getsockopt()读取。

由于没有类似“辅助消息”之类的功能可用于TCP,因此我看到找出发送者设置为TOS的唯一方法是直接检查接收到的TCP数据报的 header 。

07-25 20:24