setsockopt设置 keepalive reuseport等属性

#include <sys/socket.h>

int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len);

第一个参数socket是套接字描述符。

第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET。option_name指定准备设置的选项,option_name可以有哪些取值,这取决于level,以linux 2.6内核为例(在不同的平台上,这种关系可能会有不同),在套接字级别上(SOL_SOCKET),option_name可以有以下取值:

  1.     SO_REUSEADDR,打开或关闭地址复用功能。
        当option_value不等于0时,打开,否则,关闭。它实际所做的工作是置sock->sk->sk_reuse为1或0。

  2.      SO_SNDBUF,设置发送缓冲区的大小。

  3. SO_RCVBUF,设置接收缓冲区的大小。

  4.  SO_KEEPALIVE,套接字保活。

SO_REUSEADDR提供如下四个功能:

    SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口即使以前建立的将此端口用做他们的本地端口的连接仍存在。这通常是重启监听服务器时出现若不设置此选项则bind时将出错。

    SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例只要每个实例捆绑一个不同的本地IP地址即可。对于TCP我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。

    SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。

    SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时还允许此IP地址和端口捆绑到另一个套接口上。一般来说这个特性仅在支持多播的系统上才有而且只对UDP套接口而言(TCP不支持多播)。

    

TCP_NODELY

  


你可能感兴趣的:(setsockopt设置 keepalive reuseport等属性)