gpt4 book ai didi

c++ - 使用 getsockopt 读取 TCP_NODELAY 返回一个奇怪的值

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:00:16 27 4
gpt4 key购买 nike

我试图通过在设置后回读它来验证我的 TCP_NODELAY 设置是否有效。

我将值设置为“1”,但当我读回它时,它设置为“4”。恐怕我做错了什么。

这是我的代码:

    int tcpBefore;
socklen_t tcpBeforeLen = sizeof(tcpBefore);
int res = getsockopt(socket, IPPROTO_TCP, TCP_NODELAY, &tcpBefore, &tcpBeforeLen);

// Turn on TCP no delay
int tcpNoDelay = 1;
res = setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, (void *)&tcpNoDelay, sizeof(tcpNoDelay));

int tcpAfter;
socklen_t tcpAfterLen = sizeof(tcpAfter);
res = getsockopt(socket, IPPROTO_TCP, TCP_NODELAY, &tcpAfter, &tcpAfterLen);

我得到的“tcpBefore”值是“0”。设置后得到的值为“4”。这似乎很奇怪。

我做错了什么吗?

最佳答案

没关系。唯一相关的是标志为零或非零。我很确定 ios(你用它来标记问题)的行为或多或少会像旧的 Darwin 代码,并且通过阅读我可以看到在设置选项时,内核只关心它是否是是否为零,但在读取时使用实际的内部标志值。

如果你有内核包含文件,你可以在 netinet/tcp_var.h 中找到相关的标志(这是内核包含文件,所以不要自己包含它)它被称为 TF_NODELAY 并且恰好值为 4。

关于c++ - 使用 getsockopt 读取 TCP_NODELAY 返回一个奇怪的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31834030/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com