setsockopt/getsockopt

setsockopt

int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);

sockfd:标识一个套接口的描述字。
level:选项定义的层次;支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6。
optname:需设置的选项。
optval:指针,指向存放选项待设置的新值的缓冲区。
optlen:optval缓冲区长度。

TCP:

struct tcphdr {
        __be16  source;
        __be16  dest;
        __be32  seq;
        __be32  ack_seq;
#if defined(__LITTLE_ENDIAN_BITFIELD)
        __u16   res1:4,
                doff:4,
                fin:1,
                syn:1,
                rst:1,
                psh:1,
                ack:1,
                urg:1,
                ece:1,
                cwr:1;
#elif defined(__BIG_ENDIAN_BITFIELD)
        __u16   doff:4,
                res1:4,
                cwr:1,
                ece:1,
                urg:1,
                ack:1,
                psh:1,
                rst:1,
                syn:1,
                fin:1;
#else
#error  "Adjust your <asm/byteorder.h> defines"
#endif
        __be16  window;
        __sum16 check;
        __be16  urg_ptr;
};


/* TCP socket options */
#define TCP_NODELAY             1       /* Turn off Nagle's algorithm. */
#define TCP_MAXSEG              2       /* Limit MSS */
#define TCP_CORK                3       /* Never send partially complete segments */
#define TCP_KEEPIDLE            4       /* Start keeplives after this period */
#define TCP_KEEPINTVL           5       /* Interval between keepalives */
#define TCP_KEEPCNT             6       /* Number of keepalives before death */
#define TCP_SYNCNT              7       /* Number of SYN retransmits */
#define TCP_LINGER2             8       /* Life time of orphaned FIN-WAIT-2 state */
#define TCP_DEFER_ACCEPT        9       /* Wake up listener only when data arrive */
#define TCP_WINDOW_CLAMP        10      /* Bound advertised window */
#define TCP_INFO                11      /* Information about this connection. */
#define TCP_QUICKACK            12      /* Block/reenable quick acks */
#define TCP_CONGESTION          13      /* Congestion control algorithm */
#define TCP_MD5SIG              14      /* TCP MD5 Signature (RFC2385) */
#define TCP_THIN_LINEAR_TIMEOUTS 16      /* Use linear timeouts for thin streams*/
#define TCP_THIN_DUPACK         17      /* Fast retrans. after 1 dupack */
#define TCP_USER_TIMEOUT        18      /* How long for loss retry before timeout */
#define TCP_REPAIR              19      /* TCP sock is under repair right now */
#define TCP_REPAIR_QUEUE        20
#define TCP_QUEUE_SEQ           21
#define TCP_REPAIR_OPTIONS      22
#define TCP_FASTOPEN            23      /* Enable FastOpen on listeners */
#define TCP_TIMESTAMP           24
#define TCP_NOTSENT_LOWAT       25      /* limit number of unsent bytes in write queue */


struct tcp_info {
        __u8    tcpi_state;
        __u8    tcpi_ca_state;
        __u8    tcpi_retransmits;
        __u8    tcpi_probes;
        __u8    tcpi_backoff;
        __u8    tcpi_options;
        __u8    tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;

        __u32   tcpi_rto;
        __u32   tcpi_ato;
        __u32   tcpi_snd_mss;
        __u32   tcpi_rcv_mss;

        __u32   tcpi_unacked;
        __u32   tcpi_sacked;
        __u32   tcpi_lost;
        __u32   tcpi_retrans;
        __u32   tcpi_fackets;

        /* Times. */
        __u32   tcpi_last_data_sent;
        __u32   tcpi_last_ack_sent;     /* Not remembered, sorry. */
        __u32   tcpi_last_data_recv;
        __u32   tcpi_last_ack_recv;

        /* Metrics. */
        __u32   tcpi_pmtu;
        __u32   tcpi_rcv_ssthresh;
        __u32   tcpi_rtt;
        __u32   tcpi_rttvar;
        __u32   tcpi_snd_ssthresh;
        __u32   tcpi_snd_cwnd;
        __u32   tcpi_advmss;
        __u32   tcpi_reordering;

        __u32   tcpi_rcv_rtt;
        __u32   tcpi_rcv_space;

        __u32   tcpi_total_retrans;
};

UDP:

struct udphdr {
        __be16  source;
        __be16  dest;
        __be16  len;
        __sum16 check;
};

/* UDP socket options */
#define UDP_CORK        1       /* Never send partially complete segments */
#define UDP_ENCAP       100     /* Set the socket to accept encapsulated packets */

/* UDP encapsulation types */
#define UDP_ENCAP_ESPINUDP_NON_IKE      1 /* draft-ietf-ipsec-nat-t-ike-00/01 */
#define UDP_ENCAP_ESPINUDP      2 /* draft-ietf-ipsec-udp-encaps-06 */
#define UDP_ENCAP_L2TPINUDP     3 /* rfc2661 */

IP:

#define IP_TOS          1
#define IP_TTL          2
#define IP_HDRINCL      3
#define IP_OPTIONS      4
#define IP_ROUTER_ALERT 5
#define IP_RECVOPTS     6
#define IP_RETOPTS      7
#define IP_PKTINFO      8
#define IP_PKTOPTIONS   9
#define IP_MTU_DISCOVER 10
#define IP_RECVERR      11
#define IP_RECVTTL      12
#define IP_RECVTOS      13
#define IP_MTU          14
#define IP_FREEBIND     15
#define IP_IPSEC_POLICY 16
#define IP_XFRM_POLICY  17
#define IP_PASSSEC      18
#define IP_TRANSPARENT  19

SOCKET:

/* For setsockopt(2) */
#define SOL_SOCKET      1

#define SO_DEBUG        1
#define SO_REUSEADDR    2
#define SO_TYPE         3
#define SO_ERROR        4
#define SO_DONTROUTE    5
#define SO_BROADCAST    6
#define SO_SNDBUF       7
#define SO_RCVBUF       8
#define SO_SNDBUFFORCE  32
#define SO_RCVBUFFORCE  33
#define SO_KEEPALIVE    9
#define SO_OOBINLINE    10
#define SO_NO_CHECK     11
#define SO_PRIORITY     12
#define SO_LINGER       13
#define SO_BSDCOMPAT    14
#define SO_REUSEPORT    15
#ifndef SO_PASSCRED /* powerpc only differs in these */
#define SO_PASSCRED     16
#define SO_PEERCRED     17
#define SO_RCVLOWAT     18
#define SO_SNDLOWAT     19
#define SO_RCVTIMEO     20
#define SO_SNDTIMEO     21
#endif

/* Security levels - as per NRL IPv6 - don't actually do anything */
#define SO_SECURITY_AUTHENTICATION              22
#define SO_SECURITY_ENCRYPTION_TRANSPORT        23
#define SO_SECURITY_ENCRYPTION_NETWORK          24

#define SO_BINDTODEVICE 25

/* Socket filtering */
#define SO_ATTACH_FILTER        26
#define SO_DETACH_FILTER        27
#define SO_GET_FILTER           SO_ATTACH_FILTER

#define SO_PEERNAME             28
#define SO_TIMESTAMP            29
#define SCM_TIMESTAMP           SO_TIMESTAMP

#define SO_ACCEPTCONN           30

#define SO_PEERSEC              31
#define SO_PASSSEC              34
#define SO_TIMESTAMPNS          35
#define SCM_TIMESTAMPNS         SO_TIMESTAMPNS

#define SO_MARK                 36

#define SO_TIMESTAMPING         37
#define SCM_TIMESTAMPING        SO_TIMESTAMPING

#define SO_PROTOCOL             38
#define SO_DOMAIN               39

#define SO_RXQ_OVFL             40

#define SO_WIFI_STATUS          41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF             42

/* Instruct lower device to use last 4-bytes of skb data as FCS */
#define SO_NOFCS                43

#define SO_LOCK_FILTER          44

#define SO_SELECT_ERR_QUEUE     45

#define SO_BUSY_POLL            46
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值