getsockopt renvoie une valeur IP_TOS différente de celle définie dans setsockopt

J’essaie d’utiliser setsockopt pour définir la valeur IPTOS_THROUGHPUT sur IPTOS_THROUGHPUT . L’ setsockopt renvoyé 0 . Cependant, getsockopt indique que la valeur IP_TOS est définie sur 1 , ce qui est différent de IPTOS_THROUGHPUT ( 0x8 ). Quelqu’un at-il une idée de ce qui aurait pu causer l’inadéquation de la valeur IPTOS dans les ensembles setsockopt et getsockopt ?

Voici la sortie du journal:

Définir le marquage DSCP sur le support 26

setsockopt sur le socket 26 à 8 renvoie 0

Le marquage DSCP sur la prise 26 est 1, différent de celui attendu 8

Ci-dessous le 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; } } } 

Vous devez utiliser l’option de niveau IPPROTO_IP au lieu de IPPROTO_TCP