16.3.3 发送网络数据send()
2009-12-21 16:22
99 查看
16.3.3 发送网络数据send()
Linux对网络数据的发送过程的处理与接收过程相反。在一端对socket进行write()的过程中,首先会把要write的字符串缓冲区整理成msghdr的数据结构形式,然后调用sock_sendmsg()把msghdr的数据传送至inet层。对于msghdr结构中数据区中的每个数据包,创建sk_buff结构,填充数据,挂至发送队列。一层层往下层协议传递,如图16.13所示。以下每层协议不再对数据进行复制,而是对sk_buff结构进行操作。
![](http://i3.6.cn/cvbnm/db/07/98/bfce6820f975c7aa8be21544da2a5f9c.png)
![](http://i3.6.cn/cvbnm/11/0d/f0/de87cf3e1906be4637dbaefbc3395a6b.png)
![](http://i3.6.cn/cvbnm/4a/c9/0b/6169169992a97b74885854bffc44524f.png)
图16.11 网卡接收数据流程 图16.12 协议栈处理数据流程 图16.13 协议栈处理数据流程
最后调用网络驱动,发送数据,在网络发送成功后要产生中断,将发送结果反馈回应用层,此过程与接收网络数据的过程类似。
相关文章推荐
- 网络编程:send/write强制发送所有数据
- 关于使用asio发送网络数据的优化。
- 网络编程-TCP程序实例(只是发送了数据,在服务器显示)
- 【计算机网络】网络编程--udp发送接收数据
- 网络编程_发送端的数据来自于键盘录入案例
- iOS网络篇—发送json数据给服务器以及多值参数
- 网络编程_TCP协议发送数据
- Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
- 基于tcp/ip的数据网络数据传输发送端
- 网络——在网络上发送,接收数据
- iOS网络开发基础--向服务器发送数据的方式
- Java网络编程:在服务端接收和发送数据
- 网络通讯合并数据发送的重要性和实现原理
- 在 TCP 网络上检测出有重复名称,发送消息的计算机的 IP 地址在数据中
- 使用UDP协议编写一个网络程序,设置接收端程序的监听端口是8001,发送端发送的数据是“Hello, world”。
- C#网络Socket的数据发送与接收处理(利用异步)的模板(模式)
- 使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出。
- HttpSendRequest向服务端发送数据,构造请求http头
- Linux网络编程--5. 用户数据报发送
- android 解析网络xml数据,发送xml数据,解析json数据