- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我可以在接受新连接时设置 TCP_NODELAY,如下所示:
fd = accept(listener, (struct sockaddr *)&sin, &slen);
if (fd < 0) {
perror("accept");
return;
}
if (fd > FD_SETSIZE) {
perror("fd > FD_SETSIZE\n");
return;
}
int onex = 1 ;
setsockopt(fd,IPPROTO_TCP,TCP_NODELAY,&onex,sizeof(onex));
也可以在连接到服务器后设置 TCP_NODELAY :
bzero(&addr,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port_to_order);
addr.sin_addr.s_addr = inet_addr(ipaddr);
if(connect(iConnCenter,(struct sockaddr *)&addr,sizeof(addr)) < 0){
printf(" to DBServer.exe socket to iConn error:== [%d]\n",port_to_order );
return -1 ;
}
int onex = 1 ;
setsockopt(iConnCenter,IPPROTO_TCP,TCP_NODELAY,&onex,sizeof(onex));
我有一个情况,我无法获得连接的 fd,这是一个没有fd信息的库函数调用,示例如下:
TraderApi* pTrader = TraderApi::CreateTraderApi();
TraderSpi spi(pTrader) ;
pTrader->Init(g_frontaddr,&spi);
然后使用 pTrader->ReqService(structA) 发送数据,在这种情况下,我没有机会连接 fd ,所以我不能设置 TCP_NODELAY 。
我想知道在这种情况下,我该如何设置 TCP_NODELAY?!是否有一个配置文件,或者我可以为这个应用程序或这个操作系统中发生的所有连接设置 TCP_NODELAY?!
应用程序在运行 RedHat 3.10.x86_64 的框中。
编辑:
我用谷歌搜索并在
找到了 list-open-fd.c 的源代码示例https://github.com/ONsec-Lab/scripts/blob/master/list-open-fd.c
for( fd=0; fd<65535; fd++) {
if( fstat( fd, &st) == -1) {
continue;
}
switch (st.st_mode & S_IFMT) {
case S_IFBLK: printf("fd %d is block device\n", fd); break;
case S_IFCHR: printf("fd %d is character device\n", fd); break;
case S_IFDIR: printf("fd %d is directory\n", fd); break;
case S_IFIFO: printf("fd %d is FIFO/pipe\n", fd); break;
case S_IFLNK: printf("fd %d is symlink\n", fd); break;
case S_IFREG: printf("fd %d is regular file\n", fd); break;
case S_IFSOCK: printf("fd %d is socket\n", fd); break;
default: printf("fd %d is unknown?\n", fd); break;
}
} //for
我想我可以通过使用 mode = IFSOCK 检查 fd 来获取 pTrader->Init 创建的 fd。
最佳答案
如果 TraderAPI
正在调用 Linux 套接字 API,那么您可以使用自己的实现拦截调用,该实现将在底层 API 创建套接字后设置 TCP_NODELAY
。您可能需要通过共享库提供拦截的调用,并通过 LD_PRELOAD
加载它。
要调用真正的套接字 API,您可以在 libc.so
和 dlsym
上使用 dlopen
您正在拦截和存储的套接字 API函数指针。然后在需要调用真正的 API 时调用它们。
关于c++ - 在不知道文件描述符的情况下设置 TCP_NODELAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39216749/
我可以在接受新连接时设置 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 开发人员觉得有必要引入一
我是一名优秀的程序员,十分优秀!