我遇到了一个问题,当我使用函数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);
}
感谢
修改
我忘了确切地说我正在使用cygwin和Clion在Windows上运行代码。
我更改了代码,现在tailleS
的类型为socklen_t
,并使用printf("Taille maximale d'un segment = %u\n", tailleS);
打印其值
结果是Taille maximale d'un segment = 0
。
所以问题仍然是相同的,即使getsockopt有效,我也没有得到正确的值。
答案 0 :(得分:1)
您的tailleS
变量必须是socklen_t
类型,在大多数平台上都可以解析为无符号值 - 但是,您确实使用有符号整数。这贬低了价值。
应使用%u
格式说明符打印该值,以告知printf
此变量是无符号的。
最后一句话:您似乎意识到您正在检索的不是MTU,而是TCP段大小,这是一个不同的东西(接近但仍然不同)