V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
holinhot
V2EX  ›  问与答

C 语言里不支持的 TCP 窗口大小调整吗

  •  
  •   holinhot · 2020-10-05 01:27:48 +08:00 · 1857 次点击
    这是一个创建于 1546 天前的主题,其中的信息可能已经有所发展或是发生改变。

    gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)编译的时候报错误。

    *server2.c: In function ‘create_server_fd’: server2.c:81:42: error: ‘TCP_WINDOW_CLAMP’ undeclared (first use in this function) if (setsockopt(serverfd, SOL_SOCKET, TCP_WINDOW_CLAMP, (char )& WINDOW_CLAMP, sizeof(WINDOW_CLAMP)) < 0) ^ server2.c:81:42: note: each undeclared identifier is reported only once for each function it appears in

    int serverfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
        int REUSEADDR = 1;
        int REUSEPORT = 1;
        int WINDOW_CLAMP = 1;
        if (setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&REUSEADDR, sizeof(REUSEADDR)) < 0)
            perror("setsockopt(SO_REUSEADDR) failed");
        if (setsockopt(serverfd, SOL_SOCKET, SO_REUSEPORT, (const char*)&REUSEPORT, sizeof(REUSEPORT)) < 0)
            perror("setsockopt(SO_REUSEPORT) failed");
        if (setsockopt(serverfd, SOL_SOCKET, TCP_WINDOW_CLAMP, (char *)& WINDOW_CLAMP, sizeof(WINDOW_CLAMP)) < 0)
            perror("setsockopt(TCP_WINDOW_CLAMP) failed");
    
    
        if (serverfd == -1)
            EXIT("create socket fail");
    
    6 条回复    2020-10-05 07:52:58 +08:00
    jjshare
        1
    jjshare  
       2020-10-05 01:33:43 +08:00
    头文件没引?
    holinhot
        2
    holinhot  
    OP
       2020-10-05 01:41:25 +08:00
    @jjshare 有引入,前面加的两个 SO_REUSEPORT 和 SO_REUSEADDR 没问题

    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <pthread.h>
    #include <ctype.h>
    jedihy
        3
    jedihy  
       2020-10-05 01:46:42 +08:00
    #include <netinet/tcp.h>
    holinhot
        4
    holinhot  
    OP
       2020-10-05 02:42:18 +08:00
    @jedihy 引入 include <netinet/tcp.h>是不报错误了,不过 TCP_WINDOW_CLAMP 参数不生效。用 python 测试 TCP_WINDOW_CLAMP 是可以生效的。
    holinhot
        5
    holinhot  
    OP
       2020-10-05 03:17:07 +08:00
    @jedihy 可以了 TCP_WINDOW_CLAMP 是 IPPROTO_TCP 下的参数。c 新手
    BrettD
        6
    BrettD  
       2020-10-05 07:52:58 +08:00 via iPhone
    这报的是语法错误啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2612 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:45 · PVG 14:45 · LAX 22:45 · JFK 01:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.