我正在试图验证我的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‘。这听起来很奇怪。
我做错什么了吗?
发布于 2015-08-05 14:17:54
这样没问题。唯一相关的是旗子是零还是非零。我非常确信ios (您用它标记问题)的行为或多或少会像旧的达尔文代码,从阅读中我可以看到,在设置选项时,内核只关心它是否为零,但是当读取它时使用的是实际的内部标志值。
如果您有内核包含文件,您可以在netinet/tcp_var.h (这是内核包含文件,所以不要自己包含它)中找到相关的标志,它被称为TF_NODELAY,它的值恰好是4。
https://stackoverflow.com/questions/31834030
复制相似问题