getsockopt返回负mss(在CLION上)

时间:2016-09-27 21:30:45

标签: c sockets clion getsockopt

我遇到了一个问题,当我使用函数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有效,我也没有得到正确的值。

1 个答案:

答案 0 :(得分:1)

您的tailleS变量必须是socklen_t类型,在大多数平台上都可以解析为无符号值 - 但是,您确实使用有符号整数。这贬低了价值。

应使用%u格式说明符打印该值,以告知printf此变量是无符号的。

最后一句话:您似乎意识到您正在检索的不是MTU,而是TCP段大小,这是一个不同的东西(接近但仍然不同)