`
highsky
  • 浏览: 276184 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux核心数据结构--sock

阅读更多
包含BSD套接口的协议相关信息。例如对于一个INET(Internet Address Domain)套接口此数据结构 包含TCP/IP和UDP/IP信息。

struct sock

{

    /* This must be first. */

    struct sock             *sklist_next;

    struct sock             *sklist_prev;



    struct options          *opt;

    atomic_t                wmem_alloc;

    atomic_t                rmem_alloc;

    unsigned long           allocation;
       /* Allocation mode */

    __u32                   write_seq;

    __u32                   sent_seq;

    __u32                   acked_seq;

    __u32                   copied_seq;

    __u32                   rcv_ack_seq;

    unsigned short          rcv_ack_cnt;
      /* count of same ack */

   __u32                   window_seq;

    __u32                   fin_seq;

    __u32                   urg_seq;

    __u32                   urg_data;

    __u32                   syn_seq;

    int                     users;
            /* user count */

  /*

   *    Not all are volatile, but some are, so we

   *     might as well say they all are.

   */

    volatile char           dead,

                            urginline,

                            intr,

                            blog,

                            done,

                            reuse,

                            keepopen,

                            linger,

                            delay_acks,

                            destroy,

                            ack_timed,

                            no_check,

                            zapped,

                            broadcast,

                            nonagle,

                            bsdism;

    unsigned long           lingertime;

    int                     proc;



    struct sock             *next;

    struct sock             **pprev;

    struct sock             *bind_next;

    struct sock             **bind_pprev;

    struct sock             *pair;

    int                     hashent;

    struct sock             *prev;

    struct sk_buff          *volatile send_head;

    struct sk_buff          *volatile send_next;

    struct sk_buff          *volatile send_tail;

    struct sk_buff_head     back_log;

    struct sk_buff          *partial;

    struct timer_list       partial_timer;

    long                    retransmits;

    struct sk_buff_head     write_queue,

                            receive_queue;

    struct proto            *prot;

    struct wait_queue       **sleep;

    __u32                   daddr;
    __u32                   saddr;            /* Sending source */

   __u32                   rcv_saddr;        /* Bound address */

    unsigned short          max_unacked;

    unsigned short          window;

    __u32                   lastwin_seq;
     /* sequence number when we last

                                                 updated the window we offer */

   __u32                   high_seq;         /* sequence number when we did

                                                 current fast retransmit */

    volatile unsigned long  ato;              /* ack timeout */

    volatile unsigned long  lrcvtime;         /* jiffies at last data rcv */

    volatile unsigned long  idletime;         /* jiffies at last rcv */

    unsigned int            bytes_rcv;
/*

*    mss is min(mtu, max_window)

*/

    unsigned short          mtu;              /* mss negotiated in the syn's */

    volatile unsigned short mss;              /* current eff. mss - can change */

    volatile unsigned short user_mss;         /* mss requested by user in ioctl */

    volatile unsigned short max_window;

    unsigned long           window_clamp;

    unsigned int            ssthresh;

    unsigned short          num;

    volatile unsigned short cong_window;

    volatile unsigned short cong_count;

    volatile unsigned short packets_out;

    volatile unsigned short shutdown;

    volatile unsigned long  rtt;

    volatile unsigned long  mdev;

    volatile unsigned long  rto;



    volatile unsigned short backoff;

    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 char           protocol;

    volatile unsigned char  state;

    unsigned char           ack_backlog;

    unsigned char           max_ack_backlog;

    unsigned char           priority;

    unsigned char           debug;

    int                     rcvbuf;

    int                     sndbuf;

    unsigned short          type;

    unsigned char           localroute;
       /* Route locally only */

/*

*    This is where all the private (optional) areas that don't

*    overlap will eventually live.

*/

    union

    {

          struct unix_opt   af_unix;

#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

#ifdef CONFIG_INET

        struct inet_packet_opt  af_packet;

#ifdef CONFIG_NUTCP       

        struct tcp_opt      af_tcp;

#endif       

#endif

    } protinfo;         
/*

*    IP 'private area'

*/

    int                     ip_ttl;           /* TTL setting */

   int                     ip_tos;           /* TOS */

    struct tcphdr           dummy_th;

    struct timer_list       keepalive_timer;  /* TCP keepalive hack */

    struct timer_list       retransmit_timer; /* TCP retransmit timer */

    struct timer_list       delack_timer;     /* TCP delayed ack timer */

    int                     ip_xmit_timeout;  /* Why the timeout is running */

    struct rtable           *ip_route_cache;  /* Cached output route */

    unsigned char           ip_hdrincl;       /* Include headers ? */

#ifdef CONFIG_IP_MULTICAST 

    int                     ip_mc_ttl;  
     /* Multicasting TTL */

    int                     ip_mc_loop;       /* Loopback */

    char                    ip_mc_name[MAX_ADDR_LEN]; /* Multicast device name */

    struct ip_mc_socklist   *ip_mc_list;      /* Group array */

#endif 



/*

*    This part is used for the timeout functions (timer.c).

*/

    int                      timeout;         /* What are we waiting for? */

    struct timer_list        timer;           /* This is the TIME_WAIT/receive

                                               * timer when we are doing IP

                                               */

    struct timeval           stamp;

/*

  *    Identd

  */

    struct socket            *socket;

  /*

   *    Callbacks

   */

    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);

 

};
分享到:
评论

相关推荐

    linux内核中sock和socket数据结构

    Linux内核中的sock和socket数据结构是网络编程的核心组成部分,它们是实现网络通信的基础构件。在Linux操作系统中,网络通信的实现依赖于BSD套接字接口,而这一接口在内核中是通过sock和socket数据结构来实现的。 ...

    追踪Linux TCPIP代码运行--基于2.6内核

    在深入理解Linux内核中的TCP/IP栈之前,了解其基础数据结构至关重要。本节将详细介绍 `socket` 和 `sock` 结构,它们是Linux网络编程的核心组成部分。 ##### Socket结构体 `socket` 结构体是通用的套接字结构,在...

    linux数据结构[汇编].pdf

    Linux操作系统的核心在于其内核,而内核的高效运行离不开一系列关键的数据结构。这些数据结构在内存管理和系统调用中起到至关重要的作用。本章详细介绍了Linux内核中的一些主要数据结构,它们是构建和管理操作系统...

    Reading-and-comprehense-linux-Kernel-network-protocol-stack_y123456yz.tar.gz

    5. **网络协议栈的调度和队列管理**:如`netpoll`机制用于高效地处理网络事件,`sk_buff`(socket buffer)数据结构用于缓冲网络数据。 通过注释和流程分析,你可以看到每个函数的调用顺序,理解数据包是如何从物理...

    linux 内核socket相关数据结构介绍

    ### Linux 内核 Socket 相关数据结构介绍 #### 一、引言 在 Linux 内核中,网络通信的核心是 Socket。为了更好地理解和掌握 Socket 的工作原理与内部机制,了解其相关的数据结构至关重要。本文将详细介绍 Linux ...

    LINUX编程白皮书10-14.rar

    - Linux文件系统采用层次结构,根目录`/`下包含各种系统目录,如`/bin`(基本命令)、`/usr`(用户程序)和`/etc`(配置文件)。 2. **进程管理**: - 进程是程序的执行实例,Linux提供了创建、终止、控制进程的...

    Linux数据结构电子书.pdf

    《Linux数据结构》一书详尽地介绍了在Linux操作系统中使用的关键数据结构,这些数据结构是内核功能的基础。在Linux内核中,数据结构扮演着至关重要的角色,因为它们被用来组织和管理系统的资源,如文件、内存、设备...

    基于zynq平台linux外设驱动分析-内核部分

    本文档旨在深入探讨Zynq平台上的Linux内核外设驱动开发与工作原理,特别是针对Zynq架构下的核心外设(如NAND Flash、以太网、串口、USB协议栈)的初始化与驱动程序分析。考虑到Zynq采用了SMP(Symmetric Multi-...

    Linux 数据结构

    Linux操作系统的核心在于其内核,而内核的高效运行离不开一系列关键的数据结构。这些数据结构在Linux中扮演着至关重要的角色,它们是操作系统理解和管理硬件、文件系统、进程、网络等核心功能的基础。以下是根据标题...

    Linux内核中PF-KEY协议族的实现(1).docx

    4. **数据结构**:`struct pfkey_sock`扩展了常规的`struct sock`结构,用于管理PF_KEY套接字。其中,`registered`和`promisc`字段分别表示是否已登记和是否处于混杂模式。`struct xfrm_state`则包含了SA的具体实现...

    深入分析_Linux_内核链表的数据结构.doc

    下面详细介绍 Linux 内核链表数据结构的核心概念及其实现细节。 ##### 数据结构定义 内核链表的基本单位是 `struct list_head` 结构体,它包含了两个指针:`prev` 和 `next`,用于连接前后节点。这种双向链表的...

    linux网络体系结构

    - **实现**:`struct sock`是Linux中用来表示套接字的主要数据结构,它定义了套接字的状态和操作方法。每个套接字都有一个关联的`proto`结构,该结构定义了如何在套接字层和传输层之间执行特定操作。 3. **网络...

    Linux数据结构电子书整理.pdf

    23. **task_struct**: 核心数据结构之一,表示系统中的进程或任务,包含了进程的状态、资源分配等信息。 24. **timer_list**: 用于实现进程的实时定时器,处理定时事件。 25. **tq_struct**: 在调度队列中,每个`...

    Linux 4.4.0内核源码分析TCP实现

    1. sock 结构体:sock 结构体是 Linux 内核中网络子系统的核心数据结构,它描述了一个网络套接字的所有信息。 2. inet 结构体:inet 结构体是 Linux 内核中 inet 层的数据结构,它描述了一个 IPv4 或 IPv6 的网络套...

    Linux程序设计-网络编程-第9章.ppt

    Socket分为两种类型:流式Socket(SOCK_STREAM,对应TCP)和数据报式Socket(SOCK_DGRAM,对应UDP)。 2. **Socket的建立与配置** - `socket()`函数:用于创建一个新的Socket,返回一个用于后续操作的Socket描述符...

    Linux网络体系结构详解

    通过对`sk_write_queue`和`sk_send_head`等关键数据结构的理解,以及对发送函数间关系的分析,我们可以更深入地了解TCP是如何管理和控制数据包的发送流程的。此外,发送前的克隆过程保证了数据包在传输过程中的可靠...

    Linux网络子系统分析文档.doc

    5. inet_protosw(协议交换表):inet_protosw 结构体是 Linux 网络子系统的核心数据结构之一,用于描述协议栈的交换表。 三、Linux 网络子系统的分析 Linux 网络子系统的分析是了解 Linux 网络子系统的核心组件和...

    linux下TCP-IP通信

    TCP/IP协议栈是互联网通信的核心,它提供了可靠的数据传输服务。在这个场景中,我们有服务器端(Server)和客户端(Client)两个部分,它们通过TCP连接进行交互。 首先,服务器端的主要功能包括: 1. **连接客户端*...

Global site tag (gtag.js) - Google Analytics