struct--sock

socket->sk

    结构体sock是套接口在网络层的表示,在代码/usr/src/linux-2.6.19/include/net/sock.h定义:

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
#define sk_hash           __sk_common.skc_hash
#define sk_prot           __sk_common.skc_prot
    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;
    struct sk_buff_head   sk_async_wait_queue;
    int                   sk_wmem_queued;
    int                   sk_forward_alloc;
    gfp_t                 sk_allocation;
    int                   sk_sndbuf;
    int                   sk_route_caps;
    int                   sk_gso_type;
    int                   sk_rcvlowat;
    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_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;
    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;
    sk_state_change();
    sk_data_ready();
    sk_write_space();
    sk_error_report();
    sk_backlog_rcv();
    sk_destruct();
};



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值