struct sk_buff与socket

简介: struct sk_buff与socket作者:gfree.wind@gmail.com原文:http://blog.chinaunix.net/u3/116859/showart.php?id=2441552在Linux2.6中,struct sk_buf承担了socket的输入输出的传输缓存的任务。
struct sk_buff与socket
作者:gfree.wind@gmail.com

在Linux2.6中,struct sk_buf承担了socket的输入输出的传输缓存的任务。

首先,还是先看struct socket的定义

/**
 * struct socket - general BSD socket
 * @state: socket state (%SS_CONNECTED, etc)
 * @type: socket type (%SOCK_STREAM, etc)
 * @flags: socket flags (%SOCK_ASYNC_NOSPACE, etc)
 * @ops: protocol specific socket operations
 * @file: File back pointer for gc
 * @sk: internal networking protocol agnostic socket representation
 * @wq: wait queue for several uses
 */

struct socket {
    socket_state        state;

    kmemcheck_bitfield_begin(type);
    short            type;
    kmemcheck_bitfield_end(type);

    unsigned long        flags;

    struct socket_wq    *wq;

    struct file        *file;
    struct sock        *sk;
    const struct proto_ops    *ops;
};

代码中的注释对于每一个变量说的都很清楚——看到这里,我先感叹一下,linux2.6的结构体的注释比老版本要清楚的多。到目前为止,我所看到的关键的结构体,都有清晰的注释。我们可以看出struct socket中的sock变量,是socket变量的工作核心。

那么现在跳转到struct sock的定义处。由于struct sock的定义过长,所以只展示一部分。

struct sock {
    /*
     * Now struct inet_timewait_sock also uses sock_common, so please just
     * don't add nothing before this first member (__sk_common) --acme
     */

    struct sock_common    __sk_common;
    /* skip some codes */
    int sk_rcvbuf;
    /* skip some codes */
    int sk_sndbuf;
    struct sk_buff_head    sk_receive_queue;
    struct sk_buff_head    sk_write_queue;

}

其中,sk_rcvbuf和sk_sendbuf分别是接收和发送缓存的字节数。
而struct sk_buff_head的定义如下:

struct sk_buff_head {
    /* These two members must be first. */
    struct sk_buff    *next;
    struct sk_buff    *prev;

    __u32        qlen;
    spinlock_t    lock;
};

可以看出socket的接收和发送缓存是使用一个双链表将sk_buff组织起来的。
目录
相关文章
|
20天前
|
网络协议 安全 网络安全
原始套接字-SOCK_RAW
原始套接字-SOCK_RAW
系统编程之文件IO(六)——获取文件属性(stat、fstat、lstat、struct stat)
系统编程之文件IO(六)——获取文件属性(stat、fstat、lstat、struct stat)
系统编程之文件IO(六)——获取文件属性(stat、fstat、lstat、struct stat)
|
网络协议 Linux
tcp/ip源码(18)——struct inet_sock中的cork用途
作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net 在前面的学习过程中,遇到了位于struct inet_sock中的cork,当时没有把这个变量搞得很明白,没有完全搞清这个变量的用途。
1269 0
|
缓存 网络协议 Linux
Linux协议栈(4)——sk_buff及代码
Linux协议栈(4)——sk_buff及代码   Linux内核网络中最终要的两个数据结构是sk_buff和net_device。本章介绍sk_buff结构体。 sk_buff结构可能是网络代码中最重要的数据结构。
3462 0
|
缓存 Unix Java
struct sk_buff与socket
struct sk_buff与socket作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/u3/116859/showart.php?id=2441552 在Linux2.6中,struct sk_buf承担了socket的输入输出的传输缓存的任务。
1428 0
|
网络协议 Linux 缓存
struct s_mbuf与struct sk_buff
struct s_mbuf与struct sk_buff本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
1285 0
buf.readInt8函数详解
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.
825 0
|
网络协议 Linux 数据格式