когда send () возвращается, есть три возможности:
1.отправляемые данные были скопированы в буфер ядра
2.данные для отправки были отправлены на равноправный
3.отправляемые данные были отправлены одноранговому узлу и получили его подтверждение
Будучи действительно сбитым с толку, я прочел несколько фрагментов кода о стеке TCP / IP в источнике Linux и нашел путь к потоку данных.:
когда мы используем функцию 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 () Копирует данные в буфер ядра.
, поэтому кажется, что первое предположение доказано, это правильно, или, может быть, я пропустил некоторые подробности или неправильно понял?