tcp connection setup的实现(二)
2009-09-10 00:00:00 来源:WEB开发网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;
}
Tags:tcp connection setup
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接