- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图通过在设置后回读它来验证我的 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/
我可以在接受新连接时设置 TCP_NODELAY,如下所示: fd = accept(listener, (struct sockaddr *)&sin, &slen); if (fd FD_SET
我有一个使用 TCP 从设备读取数据包的应用程序。我想知道我的接收方应用程序是否使用 TCP_NODELAY 选项创建套接字,设备会自动开始发送数据包而不缓冲它们,还是我必须在发送方(设备)上进行此更
我正在使用 Boost asio 发送 TCP 消息。我设置了 NO_DELAY 选项,因为这是一个“实时”控制系统。我看到使用 Wireshark 在消息中设置了 PSH 标志。我对性能感到满意,并
根据我对 Nagel 算法的理解,如果可能的话,它会尝试在一条消息中发送多条消息,以使用更少的带宽。 我的问题是,对于一个大学项目,我必须禁用它;我必须首先发送一个名称,然后发送年、月、日,最后发送文
我正在编写一个 c 程序,它通过 tcp 连接发送 bash shell 的输出。为了使我的程序更具响应性,我使用 setsockopt() 来启用 TCP_NODELAY,这会禁用 Nagle 的缓
我一直认为 Nagle 的算法会在两个方向影响套接字,并且设置 TCP_NODELAY 以某种方式通知远程端也关闭 Nagle。 是这样吗,还是设置 TCP_NODELAY 只影响调用它的那一端的行为
我正在诊断一个奇怪的网络问题,(我认为)我已经缩小到行为不当的 HTTP 客户端或服务器以及一些 HTTP1.1 流水线和/或 Nagle 的算法交互。我试图在 curl 中禁用 TCP_NODELA
我正在诊断一个奇怪的网络问题,(我认为)我已经缩小到行为不当的 HTTP 客户端或服务器以及一些 HTTP1.1 流水线和/或 Nagle 的算法交互。我试图在 curl 中禁用 TCP_NODELA
我正在尝试在 Ubuntu 16.04 中编译 ChatScipt v7.55。但是当我使用 make server 命令时,我得到了这个错误: evserver.cpp: In function ‘
TCP_NODELAY 和 MSG_DONWAIT 有什么区别?我知道一个是特定于 TCP 的,另一个是发送时的通用套接字选项,但这两个选项是否有行为不同场景下的不同? 就像TCP_NODELAY一样
我正在尝试在 unix 域套接字上设置标志 tcp_nodelay。我们可以设置它还是为 UNIX 域套接字设置 tcp_nodelay 是否有意义,特别是在 Linux 上? 请指教。 谢谢 最佳答
如果我用 TCP_NODELAY 创建一个 TCP 套接字启用选项并将其用于listen对于新连接,accept 会返回新套接字吗?还有TCP_NODELAY启用? 不同的套接字可以有不同的配置选项,
TCP_NODELAY 是一个启用快速发送 TCP 数据包的选项,无论它们的大小如何。当速度很重要时,这是非常有用的选项,但是,我很好奇它会对此做什么: Socket socket = [some s
我最近在运行一些比较网络性能与环回性能的性能测试时偶然发现了一个有趣的 TCP 性能问题。在我的例子中,网络性能超过了环回性能(1Gig 网络,相同的子网)。在我处理延迟的情况下,延迟是至关重要的,因
如果您在套接字上的每个调用上设置 TCP_QUICKACK 设置,之前设置了 TCP_NODELAY,QUICKACK 选项是否会覆盖 NODELAY 调用? 连接时: int i = 1; sets
我试图通过设置 TCP_NODELAY 在 Ubuntu Linux 机器上使用我的 TCP 套接字禁用 Nagle 算法范围。由于某种原因, 中未定义此常量。或 .这个常量是否已被弃用,然后从 L
我知道他们都禁用了 Nagle 的算法。 什么时候应该/不应该使用它们中的每一个? 最佳答案 首先,并非两者都禁用了 Nagle 算法。 Nagle 的算法用于减少线路中更多的小型网络数据包。该算法是
我试图通过在设置后回读它来验证我的 TCP_NODELAY 设置是否有效。 我将值设置为“1”,但当我读回它时,它设置为“4”。恐怕我做错了什么。 这是我的代码: int tcpBefore;
我正在使用 Scala 的远程参与者,但往返时间(即使是一条微不足道的消息)是 80 毫秒,大概是由于底层套接字没有禁用 TCP/IP Nagle 算法(也称为 TCP_NODELAY),或者至少这是
在写了一个answer之后关于 TCP_NODELAY 和 TCP_CORK,我意识到我一定缺乏对 TCP_CORK 细节的了解,因为我不是 100% 清楚为什么 Linux 开发人员觉得有必要引入一
我是一名优秀的程序员,十分优秀!