首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用getsockopt读取TCP_NODELAY返回一个奇怪的值

使用getsockopt读取TCP_NODELAY返回一个奇怪的值
EN

Stack Overflow用户
提问于 2015-08-05 13:31:21
回答 1查看 1.3K关注 0票数 2

我正在试图验证我的TCP_NODELAY设置是否有效,方法是在设置它之后读取它。

我把这个值设置为'1',但是当我把它读回来时,它被设置为'4‘。恐怕我做错了什么。

这是我的代码:

代码语言:javascript
复制
    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‘。这听起来很奇怪。

我做错什么了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-05 14:17:54

这样没问题。唯一相关的是旗子是零还是非零。我非常确信ios (您用它标记问题)的行为或多或少会像旧的达尔文代码,从阅读中我可以看到,在设置选项时,内核只关心它是否为零,但是当读取它时使用的是实际的内部标志值。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31834030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档