struct sock详解

struct sock详解
    结构体sock是套接口在网络层的表示,在代码include/net/sock.h 174行定义,下面是其内容:
    struct sock {
        struct sock_common  __sk_common;
#define sk_family       __sk_common.skc_family
#define sk_state        __sk_common.skc_state
#define sk_reuse        __sk_common.skc_reuse
#define sk_bound_dev_if     __sk_common.skc_bound_dev_if
#define sk_node         __sk_common.skc_node
#define sk_bind_node        __sk_common.skc_bind_node
#define sk_refcnt       __sk_common.skc_refcnt
        unsigned char       sk_shutdown : 2,
                            sk_no_check : 2,
                            sk_userlocks : 4;
        unsigned char       sk_protocol;
        unsigned short      sk_type;
        int         sk_rcvbuf;
        socket_lock_t       sk_lock;
        wait_queue_head_t   *sk_sleep;
        struct dst_entry    *sk_dst_cache;
        struct xfrm_policy  *sk_policy[2];
        rwlock_t        sk_dst_lock;
        atomic_t        sk_rmem_alloc;
        atomic_t        sk_wmem_alloc;
        atomic_t        sk_omem_alloc;
        struct sk_buff_head sk_receive_queue;
        struct sk_buff_head sk_write_queue;
        int         sk_wmem_queued;
        int         sk_forward_alloc;
        unsigned int        sk_allocation;
        int         sk_sndbuf;
        int         sk_route_caps;
        int         sk_hashent;
        unsigned long       sk_flags;
        unsigned long           sk_lingertime;

        struct {
            struct sk_buff *head;
            struct sk_buff *tail;
        } sk_backlog;
        struct sk_buff_head sk_error_queue;
        struct proto        *sk_prot;
        struct proto        *sk_prot_creator;
        rwlock_t        sk_callback_lock;
        int         sk_err,
                    sk_err_soft;
        unsigned short      sk_ack_backlog;
        unsigned short      sk_max_ack_backlog;
        __u32           sk_priority;
        struct ucred        sk_peercred;
        int         sk_rcvlowat;
        long            sk_rcvtimeo;
        long            sk_sndtimeo;
        struct sk_filter        *sk_filter;
        void            *sk_protinfo;
        struct timer_list   sk_timer;
        struct timeval      sk_stamp;
        struct socket       *sk_socket;
        void            *sk_user_data;
        struct page     *sk_sndmsg_page;
        struct sk_buff      *sk_send_head;
        __u32           sk_sndmsg_off;
        int         sk_write_pending;
        void            *sk_security;
        void            (*sk_state_change)(struct sock *sk);
        void            (*sk_data_ready)(struct sock *sk, int bytes);
        void            (*sk_write_space)(struct sock *sk);
        void            (*sk_error_report)(struct sock *sk);
        int             (*sk_backlog_rcv)(struct sock *sk,
                        struct sk_buff *skb);
        void            (*sk_destruct)(struct sock *sk);
    };

    __sk_common是套接口在网络层的最小表示。下面是其定义:
    struct sock_common {
        unsigned short      skc_family;         /*地址族*/
        volatile unsigned char  skc_state;      /*连接状态*/
        unsigned char       skc_reuse;          /*SO_REUSEADDR设置*/
        int         skc_bound_dev_if;
        struct hlist_node   skc_node;
        struct hlist_node   skc_bind_node;      /*哈希表相关*/
        atomic_t        skc_refcnt;             /*引用计数*/
    };

    sk_shutdown是一组标志位,SEND_SHUTDOWN and/or RCV_SHUTDOWN。
    sk_userlocks, SO_SNDBUF and SO_RCVBUF。
    sk_rcvbuf表示接收缓冲区的字节长度。
    sk_rmem_alloc表示接收队列已提交的字节数。
    sk_receive_queue表示接收的数据包的队列。
    sk_wmem_alloc表示发送队列已提交的字节数。
    sk_write_queue表示发送数据包的队列。
    sk_sndbuf表示发送缓冲区的字节长度。
    sk_flags,SO_LINGER (l_onoff),SO_BROADCAST,SO_KEEPALIVE,SO_OOBINLINE。
    sk_prot是指定的域内部的协议处理函数集,它是套接口层跟传输层之间的一个接口,提供诸如bind, accept, close等操作。
    sk_ack_backlog表示当前的侦听队列。
    sk_max_ack_backlog表示最大的侦听队列。
    sk_type表示套接字的类型,如SOCK_STREAM。
    sk_protocol表示在当前域中套接字所属的协议。
    几个函数指针均属回调函数,分别在套接口状态变化,有数据到达需要处理,有发送空间可用,有错误等时候被回调。最后一个函数sk_destruct在套接口释放时被回调。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值