针对 struct sock 的一些注释:

struct sock {
 /* Socket demultiplex comparisons on incoming packets. */
 __u32   daddr;  /* 外部IP地址   */
 __u32   rcv_saddr; /* 绑定的本地IP地址  */
 __u16   dport;  /* 目标端口   */
 unsigned short  num;  /* 本地端口    */
 int   bound_dev_if; /* 绑定网卡接口的索引 不为0  */

/* 用于各种协议查找表的哈希链表 */
 struct sock  *next;
 struct sock  **pprev;
 struct sock  *bind_next;
 struct sock  **bind_pprev;

volatile unsigned char state,  /* 连接状态   */
    zapped;  /* In ax25 & ipx means not linked */
 __u16   sport;  /* 源端口    */

unsigned short  family;  /* 地址簇   */
 unsigned char  reuse;  /* SO_REUSEADDR设置,表示地址重用 */
 unsigned char  shutdown; /* 半关闭标志 SEND_SHUTDOWN和RCV_SHUTDOWN掩码 */
 atomic_t  refcnt;  /* 引用计数   */

socket_lock_t  lock;  /* 同步锁.   */
 int   rcvbuf;  /* 接受缓冲区长度(单位:字节) */

wait_queue_head_t *sleep;  /* 等待队列,通常指向socket的wait域 */
 struct dst_entry *dst_cache; /* 目的地缓存,用于路由查找结果  */
 rwlock_t  dst_lock; /* 目的地缓存锁*/
 atomic_t  rmem_alloc; /* 已接收队列字节数 */
 struct sk_buff_head receive_queue; /* 接收包队列   */
 atomic_t  wmem_alloc; /* 已发送字节数 */
 struct sk_buff_head write_queue; /* 包发送队列   */
 atomic_t  omem_alloc; /* "o"是"option"(选项)或"other"(其它)的意思 */
 int   wmem_queued; /* 稳定的队列长度 */
 int   forward_alloc; /* 提前分配的空间 */
 __u32   saddr;  /* 发送源地址   */
 unsigned int  allocation; /* 分配模式   */
 int   sndbuf;  /* 发送缓冲区长度(单位:字节)  */
 struct sock  *prev;

/* Not all are volatile, but some are, so we might as well say they all are.
  * XXX Make this a flag word -DaveM
  */
 volatile char  dead,
    done,
    urginline,
    keepopen,
    linger,
    destroy,
    no_check, /*SO_NO_CHECK标志,表示是否检查包*/
    broadcast,
    bsdism;
 unsigned char  debug;
 unsigned char  rcvtstamp;
 unsigned char  userlocks;/*SO_SNDBUF和SO_RCVBUF标志 */
 int   proc;
 unsigned long         lingertime;

int   hashent;
 struct sock  *pair;

/* The backlog queue is special, it is always used with
  * the per-socket spinlock held and requires low latency
  * access.  Therefore we special case it's implementation.
  */
 struct {
  struct sk_buff *head;
  struct sk_buff *tail;
 } backlog;

rwlock_t  callback_lock;/*用于结构末尾的回调函数互斥*/

/* 错误队列,很少使用 */
 struct sk_buff_head error_queue;

struct proto  *prot;/*网络地址簇内部协议处理*/

#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
 union {
  struct ipv6_pinfo af_inet6;
 } net_pinfo;
#endif

union {
  struct tcp_opt  af_tcp;
#if defined(CONFIG_INET) || defined (CONFIG_INET_MODULE)
  struct raw_opt  tp_raw4;
#endif
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  struct raw6_opt  tp_raw;
#endif /* CONFIG_IPV6 */
#if defined(CONFIG_SPX) || defined (CONFIG_SPX_MODULE)
  struct spx_opt  af_spx;
#endif /* CONFIG_SPX */

} tp_pinfo;

int   err, err_soft; /* Soft holds errors that don't
         cause failure but are the cause
         of a persistent failure not just
         'timed out' */
 unsigned short  ack_backlog;
 unsigned short  max_ack_backlog;
 __u32   priority;
 unsigned short  type;  /*socket类型,如:SOCK_STREAM*/
 unsigned char  localroute; /* 仅用于本地路由 */
 unsigned char  protocol; /*socket 所属网络地址簇的协议*/
 struct ucred  peercred; /*对端sock信息 SO_PEERCRED标志设置*/
 int   rcvlowat; /*SO_RCVLOWAT标志位*/
 long   rcvtimeo; /*SO_RCVTIMEO标志位*/
 long   sndtimeo; /*SO_SNDTIMEO标志位*/

#ifdef CONFIG_FILTER
 /* Socket过滤指令 */
 struct sk_filter       *filter;
#endif /* CONFIG_FILTER */

/* This is where all the private (optional) areas that don't
  * overlap will eventually live. 
  */
 union {
  void *destruct_hook;
    struct unix_opt af_unix;
#if defined(CONFIG_INET) || defined (CONFIG_INET_MODULE)
  struct inet_opt af_inet;
#endif
#if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)
  struct atalk_sock af_at;
#endif
#if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)
  struct ipx_opt  af_ipx;
#endif
#if defined (CONFIG_DECNET) || defined(CONFIG_DECNET_MODULE)
  struct dn_scp           dn;
#endif
#if defined (CONFIG_PACKET) || defined(CONFIG_PACKET_MODULE)
  struct packet_opt *af_packet;
#endif
#if defined(CONFIG_X25) || defined(CONFIG_X25_MODULE)
  x25_cb   *x25;
#endif
#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  ax25_cb   *ax25;
#endif
#if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
  nr_cb   *nr;
#endif
#if defined(CONFIG_ROSE) || defined(CONFIG_ROSE_MODULE)
  rose_cb   *rose;
#endif
#if defined(CONFIG_PPPOE) || defined(CONFIG_PPPOE_MODULE)
  struct pppox_opt *pppox;
#endif
#ifdef CONFIG_NETLINK
  struct netlink_opt *af_netlink;
#endif
#if defined(CONFIG_ECONET) || defined(CONFIG_ECONET_MODULE)
  struct econet_opt *af_econet;
#endif
#if defined(CONFIG_ATM) || defined(CONFIG_ATM_MODULE)
  struct atm_vcc  *af_atm;
#endif
#if defined(CONFIG_IRDA) || defined(CONFIG_IRDA_MODULE)
  struct irda_sock        *irda;
#endif
 } protinfo;   /*私有数据区,网络地址簇规范*/

/* This part is used for the timeout functions. */
 struct timer_list timer;  /* sock清除定时器. */
 struct timeval  stamp;  /*最后到达的包的时间戳*/

/* Identd and reporting IO signals */
 struct socket  *socket; /*BSD socket层套接字*/

/* RPC层私有数据 */
 void   *user_data;
  
 /* 回调函数 */
 void   (*state_change)(struct sock *sk);
 void   (*data_ready)(struct sock *sk,int bytes);
 void   (*write_space)(struct sock *sk);
 void   (*error_report)(struct sock *sk);

int   (*backlog_rcv) (struct sock *sk,
      struct sk_buff *skb);  
 void                    (*destruct)(struct sock *sk);
};

struct sock注释的更多相关文章

  1. struct socket 结构详解

    Socket数据结构网络协议CC++     用户使用socket系统调用编写应用程序时,通过一个数字来表示一个socket,所有的操作都在该数字上进行,这个数字称为套接字描述符.在系统调用 的实现函 ...

  2. Linux内核源代码解析之——sock's buffer参数

    本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/11539695 关于socket与sock的关系再简单 ...

  3. Linux skbuff注释笔记

    SKB结构定义   /usr/src/linux/include/linux/skbuff.h sk_buff_head: struct sk_buff_head { //SKB的头结点 /* The ...

  4. 使用Crash工具查看一个TCP listen sock内存布局实例

    利用crash工具,我们可以很方便的查看正在运行内核的一些全局变量的数据结构,如TCP的ehash.bhash哈希桶,全局变量的查看比较简单.Crash工具还允许我们查看调用堆栈内部的局部变量,下面示 ...

  5. 【Linux 内核网络协议栈源码剖析】网络栈主要结构介绍(socket、sock、sk_buff,etc)

    原文:http://blog.csdn.net/wenqian1991/article/details/46700177 通过前面的分析,可以发现,网络协议栈中的数据处理,都是基于各类结构体,所有有关 ...

  6. struct socket结构体详解

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://weiguozhihui.blog.51cto.com/3060615/15852 ...

  7. Struct Socket详细分析(转)

    原文地址:http://anders0913.iteye.com/blog/411986 用户使用socket系统调用编写应用程序时,通过一个数字来表示一个socket,所有的操作都在该数字上进行,这 ...

  8. ERROR 2002 (HY000): Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) "

    找不到mysql.sock这个文件 如果在你操作安装提示创建该文件,重启服务器还是提示这个错误可以试一下 mysql -uroot -h 127.0.0.1 -p 应该是可以直接进入 具体处理方法 重 ...

  9. sock skbuf 结构:

    /** * struct sock - network layer representation of sockets * @__sk_common: shared layout with inet_ ...

随机推荐

  1. Easy Finding POJ - 3740 (DLX)

    显然这是一道dfs简单题 或许匹配也能做 然而用了dancing links 显然这也是一道模板题 好的吧 调了一上午 终于弄好了模板 Easy Finding Time Limit: 1000MS ...

  2. 【XSY2730】Ball 多项式exp 多项式ln 多项式开根 常系数线性递推 DP

    题目大意 一行有\(n\)个球,现在将这些球分成\(k\) 组,每组可以有一个球或相邻两个球.一个球只能在至多一个组中(可以不在任何组中).求对于\(1\leq k\leq m\)的所有\(k\)分别 ...

  3. pycharm opencv4.0安装使用

    pycharm+opencv4.0 还记得去年冬天装了两回opencv3,每次都搞得死去活来的.. 今天也是查了一上午,什么anaconda,vs,但是我是在pycharm的虚拟环境中安装,突然看到一 ...

  4. MT【285】含参数函数绝对值的最大值

    (浙江2013高考压轴题)已知$a\in R$,函数$f(x)=x^3-3x^2+3ax-3a+3$(2)当$x\in[0,2]$时,求$|f(x)|$的最大值. 分析:由题意$f^{'}(x)=3x ...

  5. 【BZOJ1188】分裂游戏(博弈论)

    [BZOJ1188]分裂游戏(博弈论) 题面 BZOJ 洛谷 题解 这道题目比较神仙. 首先观察结束状态,即\(P\)状态,此时必定是所有的豆子都在最后一个瓶子中. 发现每次的转移一定是拿出一棵豆子, ...

  6. 【BZOJ5335】[TJOI2018]智力竞赛(二分图匹配)

    [BZOJ5335][TJOI2018]智力竞赛(二分图匹配) 题面 BZOJ 洛谷 题解 假装图不是一个DAG想了半天,.发现并不会做. 于是假装图是一个DAG. 那么显然就是二分答案,然后求一个最 ...

  7. luogu3292 幸运数字 (点分治+线性基)

    首先第一眼是一个倍增套线性基,但是$O(Qlog^2Vlog^N)=10^{10}$的复杂度... 即使是st表也只是变成了$O(Nlog^2Vlog^N)$啊 考虑点分治,相对于倍增显著减少了线性基 ...

  8. sscanf、sprintf、stringstream常见用法

    转载自:https://blog.csdn.net/jllongbell/article/details/79092891 前言: 以前没有接触过stringstream这个类的时候,常用的字符串和数 ...

  9. 洛谷P1080 国王游戏

    两个难点. 怎么想到的贪心? 首先确定算法: 显然不是数据结构题.转成图论也不太可能. 考虑DP:f[i][j]表示前i个人取j状态的最小最大值......2^1000,直接放弃. 因为出现了“最大值 ...

  10. (转)每天一个linux命令(44):top命令

    背景:在面试时候面试官问到关于linux服务器下内存优化的问题.自己之前可能接触过也没有深入总结过. top命令 每天一个linux命令(44):top命令