02.07.2013 Views

Inside Linux TCP stack: Overview

Inside Linux TCP stack: Overview

Inside Linux TCP stack: Overview

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!