Inside Linux TCP stack: Overview
Inside Linux TCP stack: Overview
Inside Linux TCP stack: Overview
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Rx Data: from system call<br />
Key features: Rx data<br />
tcp_recvmsg()<br />
1. 计算 receive timeout<br />
2. 进入主工作循环<br />
2.1 如果接收到了紧急数据,或者有信号需要处理,就退出这次系统调用。<br />
2.2 从 copied_seq 开始搜索接收队列,查找适当位置上的 skb<br />
2.3 复制SEG数据到用户的缓冲区内<br />
2.4 调整接收队列的状态,加速下次查找<br />
2.5 如果不是 MSG_PEEK ,就把这个 SEG 从接收队列上删掉<br />
2.6 如果 2.2 步没有找到需要的 skb ,就进行一系列可能错误检查,如果没有发生错误就<br />
进入休眠。之后, tcp_rcv_established() 接收到数据后会复制到 prequeue ( “ 接收<br />
区 ” ),然后唤醒这个任务,之后,再进入与 2.2 - 2.5 类似的过程<br />
接收队列:<br />
sk_receive_queue<br />
DMA channel<br />
ucopy.prequeue<br />
sk_backlog_queue<br />
async_queue