在不知道文件描述符的情况下设置TCP_NODELAY

Barfatchen

我可以在接受新连接的同时设置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的框中。

编辑 :

我已经在google上搜索并找到了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。

x

如果TraderAPI正在调用Linux套接字API,则可以使用您自己的实现来拦截这些调用,该实现将TCP_NODELAY在基础API创建套接字之后进行设置您可能需要通过共享库提供被拦截的呼叫,并通过进行加载LD_PRELOAD

要调用真正的套接字API,可以使用dlopenonlibc.sodlsym要拦截的套接字API并存储函数指针。然后在需要调用真实API时调用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不创建新int的情况下设计RAII文件描述符

来自分类Dev

如何在不创建新int的情况下设计RAII文件描述符

来自分类Dev

在不知道类型的情况下从文件中读取

来自分类Dev

在不知道文件名的情况下从网站下载文件,然后提取并移动到设置位置

来自分类Dev

ORA-12505,TNS:listener当前不知道连接描述符中给出的SID吗?

来自分类Dev

ORA-12514:TNS:侦听器当前不知道连接描述符中请求的服务

来自分类Dev

ORA-12514:TNS:侦听器当前不知道连接描述符中请求的服务

来自分类Dev

错误连接到Oracle时,TNS:listener当前不知道连接描述符中请求的服务

来自分类Dev

在不知道收件人IP地址的情况下建立TCP连接

来自分类Dev

在不知道类结构的情况下重载赋值运算符

来自分类Dev

在不知道xml文件结构的情况下解析xml文件内容

来自分类Dev

在不知道文件名的情况下使用 Javascript Fetch API 读取文件

来自分类Dev

在不知道背景高度的情况下使用背景设置div高度

来自分类Dev

在不知道其ID的情况下将焦点设置为动态创建的输入字段

来自分类Dev

在不知道名称的情况下在内部设置字符串值

来自分类Dev

在不知道路径的情况下用Java写入属性文件

来自分类Dev

如何在不知道bash扩展名的情况下提取各种zip文件

来自分类Dev

如何在不知道名称的情况下访问.mat文件中的“值”?

来自分类Dev

在不知道其名称的情况下,逐行读取bash中的txt文件

来自分类Dev

在不知道编码的情况下使用Python读取文件

来自分类Dev

在不知道扩展名的情况下下载文件

来自分类Dev

在不知道密码的情况下在LUKS文件系统上更改密码

来自分类Dev

PHP-事先不知道文件夹名称的情况下读取它们

来自分类Dev

如何在不知道流精度的情况下在文件中写入双精度值

来自分类Dev

在不知道Java中特定文件夹中的名称的情况下加载类

来自分类Dev

在不知道其名称的情况下,逐行读取bash中的txt文件

来自分类Dev

在不知道结构的情况下用python读取二进制文件

来自分类Dev

ssis在不知道现有名称的情况下重命名文件

来自分类Dev

在不知道索引的情况下从命令行参数打开文件?

Related 相关文章

  1. 1

    如何在不创建新int的情况下设计RAII文件描述符

  2. 2

    如何在不创建新int的情况下设计RAII文件描述符

  3. 3

    在不知道类型的情况下从文件中读取

  4. 4

    在不知道文件名的情况下从网站下载文件,然后提取并移动到设置位置

  5. 5

    ORA-12505,TNS:listener当前不知道连接描述符中给出的SID吗?

  6. 6

    ORA-12514:TNS:侦听器当前不知道连接描述符中请求的服务

  7. 7

    ORA-12514:TNS:侦听器当前不知道连接描述符中请求的服务

  8. 8

    错误连接到Oracle时,TNS:listener当前不知道连接描述符中请求的服务

  9. 9

    在不知道收件人IP地址的情况下建立TCP连接

  10. 10

    在不知道类结构的情况下重载赋值运算符

  11. 11

    在不知道xml文件结构的情况下解析xml文件内容

  12. 12

    在不知道文件名的情况下使用 Javascript Fetch API 读取文件

  13. 13

    在不知道背景高度的情况下使用背景设置div高度

  14. 14

    在不知道其ID的情况下将焦点设置为动态创建的输入字段

  15. 15

    在不知道名称的情况下在内部设置字符串值

  16. 16

    在不知道路径的情况下用Java写入属性文件

  17. 17

    如何在不知道bash扩展名的情况下提取各种zip文件

  18. 18

    如何在不知道名称的情况下访问.mat文件中的“值”?

  19. 19

    在不知道其名称的情况下,逐行读取bash中的txt文件

  20. 20

    在不知道编码的情况下使用Python读取文件

  21. 21

    在不知道扩展名的情况下下载文件

  22. 22

    在不知道密码的情况下在LUKS文件系统上更改密码

  23. 23

    PHP-事先不知道文件夹名称的情况下读取它们

  24. 24

    如何在不知道流精度的情况下在文件中写入双精度值

  25. 25

    在不知道Java中特定文件夹中的名称的情况下加载类

  26. 26

    在不知道其名称的情况下,逐行读取bash中的txt文件

  27. 27

    在不知道结构的情况下用python读取二进制文件

  28. 28

    ssis在不知道现有名称的情况下重命名文件

  29. 29

    在不知道索引的情况下从命令行参数打开文件?

热门标签

归档