我正在尝试通过在设置后将其读回来验证我的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'。这看起来很奇怪。
我做错了吗?
答案 0 :(得分:3)
这没关系。唯一相关的是标志为零或非零。我非常确定ios
(你标记了这个问题)的行为或多或少会像旧的Darwin代码一样,从阅读中我可以看到,在设置选项时,内核只关心它是否&# 39; s为零或不是,但在读取时,使用实际的内部标志值。
如果你有内核包含文件,你可以在netinet / tcp_var.h中找到相关的标志(这是内核包含文件,所以不要自己包含它),它被称为TF_NODELAY
并且恰好具有值4。