2.6.32系统调用accept内核执行流程(3)传输层 inet_csk_accept

在前文的inet_accept()分析中我们知道inet_accept会通过如下方式调用传输层的accpet
int inet_accept(struct socket *sock, struct socket *newsock, int flags)
{
    ... 
    
    struct sock *sk2 = sk1->sk_prot->accept(sk1, flags, &err)
    
    ...
}
对于tcpv4而言此函数为inet_csk_accept(),那么我们接下来自习看看此函数的实现

在分析代码前我们需要了解,套接字有监听套接字和具体通信的套接字
监听套接字的扩展结构inet_connection_sock中存在icsk_accept_queue成员,
此成员中有两个队列,一个用于完全建立连接(完成三次握手)的队列,此队列项中会包含新建的
用于通信的sock结构,在进程不在阻塞获得此sock结构后会把此队列项从完全建立连接的队列删除.此队列的最大长度即是listen(int s, int backlog)中第二个参数指定的
另一个队列是半连接队列,即还没有完成三次握手的队列项会加入到此队列,此队列项中的sock完成三次握手后会从此队列中移除,添加到完全建立连接的队列中

 /**********************************************
sk:监听sock
flags:这些是文件标志, 例如 O_NONBLOCK
err:传出参数 用于接收错误
******************************************************/
struct sock *inet_csk_accept(struct sock *sk, int flags, int *err)
{
	struct inet_connection_sock *icsk = inet_csk(sk
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值