0

我遇到了一个问题,当我使用该函数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);
    }

谢谢

编辑

我忘了准确地说我正在使用带有 Clion 的 cygwin 在 Windows 上运行代码。

我更改了代码,现在tailleS是类型socklen_t,打印它的值和printf("Taille maximale d'un segment = %u\n", tailleS); 结果是Taille maximale d'un segment = 0

所以问题仍然是一样的,即使 getsockopt 正在工作,我也没有得到正确的值。

4

1 回答 1

1

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

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

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

于 2016-09-27T21:52:43.123 回答