代码之家  ›  专栏  ›  技术社区  ›  Ben S

如何在Solaris上的BSD套接字上设置TCP节点?

  •  6
  • Ben S  · 技术社区  · 15 年前

    我试图用以下方法关闭Nagle针对BSD套接字的算法:

    setsockopt(newSock, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof flag);
    

    但是编译器声称 TCP_NODELAY 以前从未见过:

    error: `TCP_NODELAY' undeclared (first use this function)
    

    这是包含文件的完整列表,该文件位于:

    #include <arpa/inet.h>
    #include <fcntl.h>
    #include <iostream>
    #include <netdb.h>
    #include <string>
    #include <sys/socket.h>
    #include <sys/types.h>
    using namespace std;
    

    我也有 -lnsl -lsocket 链接器选项,但它不会编译。我错过什么了吗?

    所有这些都在Solaris 8计算机上。

    2 回复  |  直到 15 年前
        1
  •  13
  •   Nikolai Fetissov    15 年前

    看来你失踪了 #include <netinet/tcp.h> 那就是那里 TCP_... 定义实况。

        2
  •  3
  •   EightyEight    15 年前

    我手边没有Solaris设备,只有Linux设备。

    grep -ri TCP_NODELAY /usr/include/*
    

    结果:

    /usr/include/linux/tcp.h:#define TCP_NODELAY            1       /* Turn off Nagle's algorithm. */
    /usr/include/netinet/tcp.h:#define      TCP_NODELAY      1      /* Don't delay send to coalesce packets  */
    

    也许你可以试试类似的东西?