send()
API собирается вернуть успех почти сразу IFF имеется достаточное буферное пространство доступно для хранения данных и таблица маршрутизации по-прежнему показывает путь к маршрутизации пакета к партнеру. (На самом деле у есть, чтобы иметь возможность связаться со сверстниками - просто, чтобы машина имела следующий доступный переход ...) Если ему нужно дождаться освобождения буферного пространства, это произойдет. (Наблюдение данных ACKed или передача на проводе должно быть легким с Wireshark.)
Кстати, уровни OSI несовершенно применяются к семействам протоколов TCP/IP; слои 1 и 2 подходят очень близко, слой 3 - примерно IP-маршрутизация, уровень 4 - примерно TCP, UDP, SCTP, ICMP и т. д. Но слои 5, 6, 7 не имеют реальных аналогов - SMTP через TLS можно считать слоем 7 или, возможно, SMTP - это уровень 7, а TLS - это слой 6 ... все это очень быстро становится нечетким.
Просто поговорить о конкретном уровне в стеке протоколов TCP/IP, о котором вам интересно. send()
работает с потоком, дейтаграммой и сырыми сокетами, поэтому он может оседлать несколько слоев стека - вы можете использовать его для отправки TCP, UDP, SCTP или ICMP-пакетов или набросать прямо на провод, если хотите.