Socket通信之Write实现流程

本文探讨了Unix Socket通信中write操作的实现细节,从socket创建到数据发送,重点解析了unix_stream_sendmsg函数的步骤,包括scm_send、sock_alloc_send_skb、memcpy等关键过程,以及在目标socket关闭时如何处理SIGPIPE信号。
摘要由CSDN通过智能技术生成

1 分析write在进程间通信的实现过程

       在内核中,socket是与文件指针挂钩的,因此就可以通过open、read、write像操作文件一样对socket进行操作;而write的过程相当于socket数据发送的过程。接下来,我们研究socket的数据发送流程。

1、从socket (AF_UNIX, SOCK_STREAM, 0)入手,经过跟踪会调到unix_create函数

 static int unix_create(struct net *net, struct socket *sock, int protocol)
{
    switch (sock->type) {
    case SOCK_STREAM:
       sock->ops = &unix_stream_ops;
       break;
         }
    return unix_create1(net, sock) ? 0 : -ENOMEM;
}

下面是socket函数的操作集

staticconst struct proto_ops unix_stream_ops = {
   .family =   PF_UNIX,
   .sendmsg =  unix_stream_sendmsg,
   .recvmsg =  unix_stream_recvmsg,
};

Write操作是通过调用unix_stream_sendmsg来实现的。

1.2 unix_stream_sendmsg函数

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值