Getsockopt returns another IP_TOS value from one set in setsockopt

I am trying to use setsockopt to set the IPTOS value to IPTOS_THROUGHPUT . The setsockopt call returned 0 . However, getsockopt shows that the IP_TOS value IP_TOS set to 1 , which is different from IPTOS_THROUGHPUT ( 0x8 ). Does anyone know what could cause the IPTOS value IPTOS in setsockopt and getsockopt ?

Here is the log output:

Install the DSCP mark on slot 26

setsockopt on socket 26 through 8 returns 0

DSCP marking on socket 26 is 1 other than expected 8

Below is the code:

 int iptos = IPTOS_THROUGHPUT; log(debug, 10, "Set DSCP Marking on socket %d\n", sockfd); retval = setsockopt(sockfd, IPPROTO_TCP, IP_TOS, &iptos, sizeof(iptos)); if (retval<0) { log(error, 99, "Failed to set DSCP marking on socket %d with error %d\n", sockfd, retval); } else { log(debug, 10, "setsockopt on socket %d to %d returns %d\n", sockfd, iptos, retval); int tos=0; socklen_t toslen=sizeof(tos); retval = getsockopt(sockfd, IPPROTO_TCP, IP_TOS, &tos, &toslen); if(retval<0) { log(warning, 99, "Failed to get DSCP marking on socket %d with error %d\n", sockfd, retval); }else { if( tos != iptos ) { log(warning, 99, "DSCP marking on socket %d is %d, different from expected %d\n", sockfd, tos, iptos); retval = 9999; } else { log(debug, 10, "Success: Set DSCP Marking on socket %d to %d\n", sockfd, iptos); retval = 0; } } } 
+4
source share
1 answer

You should use the IPPROTO_IP level parameter instead of IPPROTO_TCP

+4
source

Source: https://habr.com/ru/post/1443277/


All Articles