Linux核心数据结构--sock

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

[b]struct sock

{[/b]
/* This must be first. */

[b]struct sock *sklist_next;

struct sock *sklist_prev;


struct options *opt;

atomic_t wmem_alloc;

atomic_t rmem_alloc;

unsigned long allocation;[/b] /* Allocation mode */

[b]__u32 write_seq;

__u32 sent_seq;

__u32 acked_seq;

__u32 copied_seq;

__u32 rcv_ack_seq;

unsigned short rcv_ack_cnt;[/b] /* count of same ack */

[b] __u32 window_seq;

__u32 fin_seq;

__u32 urg_seq;

__u32 urg_data;

__u32 syn_seq;

int users;[/b] /* user count */

/*

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

* might as well say they all are.

*/

[b]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;[/b] __u32 saddr; /* Sending source */

[b] __u32 rcv_saddr;[/b] /* Bound address */

[b]unsigned short max_unacked;

unsigned short window;

__u32 lastwin_seq; [/b] [i]/* sequence number when we last

updated the window we offer */[/i]
[b] __u32 high_seq; [/b] /* sequence number when we did

current fast retransmit */

[b]volatile unsigned long ato; [/b] /* ack timeout */

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

[b]volatile unsigned long idletime; [/b] /* jiffies at last rcv */

[b]unsigned int bytes_rcv;[/b]
/*

* mss is min(mtu, max_window)

*/

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

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

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

[b]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; [/b] /* Soft holds errors that don't

cause failure but are the cause

of a persistent failure not

just 'timed out' */

[b]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;[/b] /* Route locally only */

/*

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

* overlap will eventually live.

*/

[b]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; [/b]/*

* IP 'private area'

*/

[b]int ip_ttl; [/b] /* TTL setting */

[b] int ip_tos; [/b] /* TOS */

[b]struct tcphdr dummy_th;[/b]

[b]struct timer_list keepalive_timer;[/b] /* TCP keepalive hack */

[b]struct timer_list retransmit_timer;[/b] /* TCP retransmit timer */

[b]struct timer_list delack_timer;[/b] /* TCP delayed ack timer */

[b]int ip_xmit_timeout;[/b] /* Why the timeout is running */

[b]struct rtable *ip_route_cache;[/b] /* Cached output route */

[b]unsigned char ip_hdrincl;[/b] /* Include headers ? */

[b]#ifdef CONFIG_IP_MULTICAST

int ip_mc_ttl; [/b] /* Multicasting TTL */

[b]int ip_mc_loop;[/b] /* Loopback */

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

[b]struct ip_mc_socklist *ip_mc_list;[/b] /* Group array */

[b]#endif [/b]


/*

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

*/

[b]int timeout; [/b] /* What are we waiting for? */

[b]struct timer_list timer; [/b] /* This is the TIME_WAIT/receive

* timer when we are doing IP

*/

[b]struct timeval stamp;[/b]

/*

* Identd

*/

[b]struct socket *socket;[/b]

/*

* Callbacks

*/

[b]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);



};
[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值