Мой код не работает.Я работаю с правами root (такое же поведение, как у обычного пользователя)
Сначала я хочу установить TOS, а затем получить значение.
int tos_local = 0x28;
if (setsockopt(sockfd, IPPROTO_TCP, IP_TOS, &tos_local, sizeof(tos_local))) {
error("error at socket option");
} else {
int tos=0;
int toslen=0;
if (getsockopt(sockfd, IPPROTO_TCP, IP_TOS, &tos, &toslen) < 0) {
error("error to get option");
}else {
printf ("changing tos opt = %d\n",tos);
}
}
printf печатает
с изменением tots opt = 0
Я ожидал бы напечатать 0x28 (40).
В чем проблема?
Правильный ответ:
if (setsockopt(sockfd, **IPPROTO_IP**, IP_TOS, &tos_local, sizeof(tos_local))) {
int tos=0;
int toslen=sizeof(tos); //that line here
if (getsockopt(sockfd, IPPROTO_IP, IP_TOS, &tos, &toslen) < 0) {