getockopt вернуть отрицательный MSS (на CLion)

У меня есть проблема, когда я использую функцию getsockopt чтобы получить MSS, я получил отрицательное число (или 0). Но функция выполнена успешно, сокет имеет правильное значение hSocketService правильно и работает.

Итак, я получил:

getsockopt OK
Taille maximale d'un segment = -13312

Вот код:

int tailleMsgRecu, nbreBytesRecus, finDetectee, tailleS, tailleO;


 /* 7. Recherche du MTU  -*-Mache pas-*-*/
    tailleO=sizeof(int);
    if (getsockopt(hSocketService, IPPROTO_TCP, TCP_MAXSEG, &tailleS, &tailleO) == -1)
    {
        printf("Erreur sur le getsockopt de la socket %d\n", errno);
        exit(1);
    }
    else
    {
        printf("getsockopt OK\n");
        printf("Taille maximale d'un segment = %d\n", tailleS);
    }

Спасибо

РЕДАКТИРОВАТЬ

Я забыл уточнить, что я запускаю код на Windows, используя Cygwin с Clion.

Я изменил код и теперь tailleS имеет тип socklen_tи печать его значения с printf("Taille maximale d'un segment = %u\n", tailleS);результат Taille maximale d'un segment = 0,

Таким образом, проблема остается той же, я не получаю правильное значение, даже если getsockopt работает.

1 ответ

Ваш tailleS переменная должна иметь тип socklen_t которая разрешается в значение без знака на большинстве платформ. Однако вы используете целое число со знаком. Это искажает ценность.

Печать этого значения должна быть сделана с %u спецификатор формата, чтобы сказать printf что эта переменная без знака.

И последнее замечание: вы, похоже, знаете, что вы получаете не MTU, а размер сегмента TCP, который отличается (близкий, но все же другой)

Другие вопросы по тегам