setsockopt не работает для IPPROTO_TCP IP_TOS в C

Мой код не работает. Я работаю как 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 печатает

, меняя на 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) {
6
задан cateof 26 May 2011 в 16:18
поделиться