开发学院软件开发Java tcp connection setup的实现(二) 阅读

tcp connection setup的实现(二)

 2009-09-10 00:00:00 来源:WEB开发网   
核心提示: tcp_check_req最主要工作就是调用虚函数,新建一个socket,并返回. 先来看几个相关的函数,第一个是inet_csk_reqsk_queue_unlink,它主要用来从半连接队列unlink掉一个元素.: Java代码 staticinlinevoidinet_csk_reqsk_

tcp_check_req最主要工作就是调用虚函数,新建一个socket,并返回.

先来看几个相关的函数,第一个是inet_csk_reqsk_queue_unlink,它主要用来从半连接队列unlink掉一个元素.:

Java代码

static inline void inet_csk_reqsk_queue_unlink(struct sock *sk, 
      struct request_sock *req, 
      struct request_sock **prev) 
{ 
 reqsk_queue_unlink(&inet_csk(sk)->icsk_accept_queue, req, prev); 
} 
 
static inline void reqsk_queue_unlink(struct request_sock_queue *queue, 
     struct request_sock *req, 
     struct request_sock **prev_req) 
{ 
 write_lock(&queue->syn_wait_lock); 
///处理链表. 
 *prev_req = req->dl_next; 
 write_unlock(&queue->syn_wait_lock); 
}

第二个是inet_csk_reqsk_queue_removed,它主要用来修改对应的qlen和qlen_young的值.

Java代码

static inline void inet_csk_reqsk_queue_removed(struct sock *sk, 
   struct request_sock *req) 
{ 
 if (reqsk_queue_removed(&inet_csk(sk)->icsk_accept_queue, req) == 0) 
 inet_csk_delete_keepalive_timer(sk); 
} 
 
static inline int reqsk_queue_removed(struct request_sock_queue *queue, 
     struct request_sock *req) 
{ 
 struct listen_sock *lopt = queue->listen_opt; 
///如果重传数为0则说明没有重传过,因此qlen_young跟着也减一. 
 if (req->retrans == 0) 
 --lopt->qlen_young; 
 
 return --lopt->qlen; 
}

上一页  2 3 4 5 6 7 8 9  下一页

Tags:tcp connection setup

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接