【发布时间】:2011-04-18 02:46:31
【问题描述】:
send() 返回时,有三种可能:
1.要发送的数据已复制到内核缓冲区
2。要发送的数据已发送到对等体
3.要发送的数据已发送到对等方并收到其确认
真的很迷茫,看了一些Linux源码中关于TCP/IP栈的代码,找到了数据流的路径:
当我们使用 send() 函数时,它会调用底层的 sys_sendto() 函数,而 sys_sendto() 函数使用 send_msg() 来完成这项工作,而 send_msg() 会转到 __send_msg(),最后 __send_msg() 会调用 scm_send( ) 再次使用其底层的 __scm_send() 函数。
总的来说,数据流是这样运行的:
send() ==> sys_sendto() ==> send_msg() ==> __send_msg() ==> scm_send() ==> __scm_send()
在 __scm_send() 函数中,它将数据复制到内核的缓冲区中。
所以第一个假设似乎得到了证明,是正确的,还是我错过了一些细节或误解?
【问题讨论】:
标签: sockets network-programming tcp send