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, который отличается (близкий, но все же другой)