首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏全栈程序员必看

    socketpair函数用法

    Unix套接字好像是套接字和管道的混合,socketpair()可以创建一对无命名的、相互连接的Unix域套接字。 管道历史上,它们是半双工的(数据只能在一个方向上流动),但是现在也有全双工管道。 socketpair()函数的声明: #include <sys/types.h> #include <sys/socket.h> int socketpair(int domain, int type , int protocol, int sockfd[2]); socketpair()函数用于创建一对无名的、相互连接的套接字。 (AF_UNIX, SOCK_STREAM, 0, socket_pair) == -1 ) { printf(“Error, socketpair create failed, errno gcc -o sendmsg sendmsg.c yu@ubuntu:~/Linux/217/pro_pool/socketpair .

    2.8K30编辑于 2022-11-19
  • 来自专栏全栈程序员必看

    socketpair的使用

    socketpair函数概要例如以下: #include <sys/types.h> #include <sys/socket.h> int socketpair(int domain, int type sys/socket.h文件必须包括进来定义socketpair函数原型。 socketpair函数须要四个參数。 socketpair函数的选择例如以下: SOCK_STREAM SOCK_DGRAM 对于socketpair函数,protocol參数必须提供为0。 參数sv[2]是接收代表两个套接口的整数数组。 socketpair()函数创建出两个进程,fork()之后这两个进程都会运行主程序中的代码,这个一定要注意!尤其是bind的时候,假设bind两次的话,那就会出错了。 ( AF_UNIX, SOCK_STREAM, 0, fd ); if ( r < 0 ) { perror( “socketpair()” );

    65710编辑于 2022-07-14
  • 来自专栏Linux内核深入分析

    socketpair机制

    但是上述方面比较复杂,这时候就引入要分析的socketpair了。 socketpair用于创建一对相互连接的unnamed socket。 而pipe和socketpair创建的描述符之间的区别就是: pipe创建的描述符一端只能用于读,一端用于写,而socketpair创建的描述符任意一端既可以读也可以写。 原理 ? (AF_UNIX, SOCK_SEQPACKET, 0, sockets); if(ret == -1) { printf("socketpair create error 编译代码 gcc socketpair.c -o socketpair -lpthread 2. 运行,查看结果 test$ . 如果要实现两个进程之间的双向通信,则需要将socketpair创建的一个描述符fd发送给另一个进程,这相当于两个两个不同的进程访问同一个文件。

    2K30发布于 2020-03-24
  • 来自专栏全栈程序员必看

    Socketpair 简介「建议收藏」

    socketpair – a slight generalization of pipes used for two-way stream communication. 以下内容来自:匠意雕码 http://my.oschina.net/zengsai/blog/12583 今天用了一个从没玩过的socket函数socketpair(),它的作用是在进程内创建一对sock include <errno.h> main() { int sockets[2], child; char buf[1024]; /* Get the socket pair */ if (socketpair (AF_UNIX, SOCK_STREAM, 0, sockets) < 0) { printf(“error %d on socketpair\n”, errno); exit(1); }

    65310编辑于 2022-11-04
  • 来自专栏全栈程序员必看

    socketpair函数_socket框架

    socketpair函数概要如下: #include <sys/types.h> 定义一些C宏常量 #include <sys/socket.h> 定义socketpair函数原型 int socketpair(int domain, int type, int protocol, int sv[2]); socketpair函数需要四个参数: domain-套接口的域 type -套接口类型 protocol-使用的协议 sv[2]-指向存储文件描述符的指针 类型参数声明了我们希望创建哪种类型的套接口,socketpair函数的选择如下: SOCK_STREAM SOCK_DGRAM 对于socketpair函数,protocol参数必须提供为0。 socketpair可以用于多进程间全双工通讯。 1.调用socketpair,成功后便有两个socket文件描述符,一个socket就像是一个pipe。

    60310编辑于 2022-11-04
  • 来自专栏全栈程序员必看

    socketpair原理_socket方法

    今天跟人谈到socketpair的问题,晚上回来写了个程序验证下自己的猜测! 先说说我的理解:socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中使用),描述符存储于一个二元数组,eg. s[2] .这对套接字可以进行双工通信,每一个描述符既可以读也可以写。 string = "This is a test string"; char * buf = (char*)calloc(1 , BUF_SIZE); if( socketpair test string"; char * buf = (char*)calloc(1 , BUF_SIZE); pid_t pid; if( socketpair 在内核中实现的一点点描述: socketpair会创建两个描述符,但改描述符不属于任何的实际文件系统,而是网络文件系统,虚拟的.同时内核会将这两个描述符彼此设为自己的peer即对端(这里即解决了如何标识读写端

    1.2K20编辑于 2022-11-04
  • 来自专栏全栈程序员必看

    socketpair原理_pair of shoes意思

    socketpair()函数的声明: #include <sys/types.h> #include <sys/socket.h> int socketpair(int d, int type, int protocol, int sv[2]); socketpair()函数用于创建一对无名的、相互连接的套接子。 (AF_UNIX, SOCK_STREAM, 0, socket_pair) == -1 ) { printf("Error, socketpair create failed, errno (AF_UNIX, SOCK_STREAM, 0, socket_pair) == -1 ) { printf("Error, socketpair create failed, errno $ gcc -o sendmsg sendmsg.c yu@ubuntu:~/Linux/217/pro_pool/socketpair$ .

    58210编辑于 2022-11-04
  • 来自专栏全栈程序员必看

    socketpair原理_socket负载均衡

    socketpair用于创建一对相互连接的unnamed socket。而pipe系统调用使用创建的pipe也是相互连接的unnamed pipe(无名管道)。 而pipe和socketpair创建的描述符之间的区别就是: pipe创建的描述符一端只能用于读,一端用于写,而socketpair创建的描述符任意一端既可以读也可以写。 (AF_UNIX, SOCK_SEQPACKET, 0, sockets); if(ret == -1) { printf("socketpair create error! 编译代码 gcc socketpair.c -o socketpair -lpthread 2. 运行,查看结果 test$ . 如果要实现两个进程之间的双向通信,则需要将socketpair创建的一个描述符fd发送给另一个进程,这相当于两个两个不同的进程访问同一个文件。

    76430编辑于 2022-11-04
  • 来自专栏原创分享

    从内核看socketpair的实现(基于5.9.9)

    前言:本文介绍socketpair的实现和通信。 而socketpair虽然也类似,但它不需要地址的概念,因为它用于有继承关系的进程间通信,通常是主进程调用socketpair拿到两个fd,然后fork出子进程,这样两个进程就可以通信了,不需要寻址的过程 下面我从内核角度看看socketpair的实现。 就是申请了两份这样的数据结构,然后调用钩子函数socketpair。 再调用socketpair之前,架构如下。 ? 我们接下来看socketpair钩子函数的实现。

    73730发布于 2021-07-08
  • 来自专栏开发与安全

    linux网络编程之socket(十五):UNIX域套接字编程和socketpair 函数

    四、socketpair 函数 功能:创建一个全双工的流管道 原型 int socketpair(int domain, int type, int protocol, int sv[2]); 参数 domain: 协议家族 type: 套接字类型 protocol: 协议类型 sv: 返回套接字对 返回值:成功返回0;失败返回-1 实际上socketpair 函数跟pipe 函数是类似的 ,也只能在同个主机上具有亲缘关系的进程间通信,但pipe 创建的匿名管道是半双工的,而socketpair 可以认为是创建一个全双工的管道。 可以使用socketpair 创建返回的套接字对进行父子进程通信: /****************************************************************** /socketpair   sending data: 1 recv data : 2  sending data: 3 recv data : 4  sending data: 5 recv

    5.2K00发布于 2017-12-28
  • 来自专栏全栈程序员必看

    管道socket什么意思_pipe是什么意思

    在看Android 输入系统的时候,第一次看到socketpair,发现和管道非常相似。唯他们的区别就是socketpair,默认支持全双工,而pipe是半双工的。 下面分别以socketpair和管道实现全双工通信。 ); sprintf(buf,"hello thread %d\n",cnt++); write(fd2[1],buf,strlen(buf)); sleep(3); } return 0; } Socketpair sleep(3); } return NULL; } int main(int agrc,char**argv) { int fd[2]; pthread_t thread1_t; /*1. create socketpair */ int ret = socketpair(AF_UNIX,SOCK_STREAM,0,fd); if(ret < 0){ perror("socketpair"); exit(-1); } /*2

    9.5K20编辑于 2022-11-04
  • 来自专栏xcywt

    UNIX域协议(无名套接字)

    1.socketpair函数 先看man手册: SYNOPSIS        #include <sys/types.h>          /* See NOTES */        #include <sys/socket.h>        int socketpair(int domain, int type, int protocol, int sv[2]); DESCRIPTION        The  socketpair()  call creates an unnamed pair of connected sockets in        the specified domain, 运行,需要先创建一个test.txt文件,再运行: xcy@xcy-virtual-machine:~/test/sock14_socketpair$ . xcy@xcy-virtual-machine:~/test/sock14_socketpair$ 补充: 1)虽然文件描述符是一个整形数字,但是单纯发一个数字过去是没有用的。

    1K70发布于 2018-01-12
  • 来自专栏全栈程序员必看

    socket使用方法_socket调试工具怎么用

    socketpair函数概要如下: #include <sys/types.h> #include <sys/socket.h> int socketpair(int domain, int type sys/socket.h文件必须包含进来定义socketpair函数原型。 socketpair函数需要四个参数。 socketpair函数的选择如下: SOCK_STREAM SOCK_DGRAM 对于socketpair函数,protocol参数必须提供为0。 socketpair()函数创建出两个进程,fork()之后这两个进程都会执行主程序中的代码,这个一定要注意!尤其是bind的时候,如果bind两次的话,那就会出错了。 ( AF_UNIX, SOCK_STREAM, 0, fd ); if ( r < 0 ) { perror( “socketpair()” );

    82630编辑于 2022-11-19
  • 来自专栏全栈程序员必看

    socket常用函数_socket是可重入函数吗

    前言 socketpair是Linux下的函数,其主要作用是创建一对套节字来进行进程间通信,其与匿名管道(PIPE)的作用相似,这两个套节字均可读可写. =client) closesocket(client); return -1; } static int __dgram_socketpair(struct addrinfo* addr_info,SOCKET =server) closesocket(server); if (result) freeaddrinfo(result); return -1; } int socketpair(int family (p_addrinfo, recv); //use for tcp else if(SOCK_DGRAM == type) result = __dgram_socketpair(p_addrinfo = 0) { printf("Init socket dll err"); } if(socketpair(AF_INET, SOCK_STREAM, 0, recv_pair) < 0) printf

    59130编辑于 2022-11-04
  • 来自专栏刘晓杰

    UNPv1第十四章:Unix域协议

    AF_LOCAL */  char sun_path[104]; /* null-terminated pathname */ }; 存放sun_path数组中的路径名必须以空字符结尾 2.socketpair 函数 socketpair函数建立一对相互连接的套接口,这个函数只对Unix域套接口使用。 #include <sys/socket.h> int socketpair(int family, int type, int protocol, int sockfd[2]); //返回: 成功返回 指定type参数为SOCK_STREAM调用socketpair所得到的结果称为流管道(stream pipe),这和一般的Unix管道(由pipe函数生成)类似,但流管道是全双工的,即两个描述字都是可读写的

    63530发布于 2019-02-21
  • 来自专栏全栈程序员必看

    socket常用函数_socket recv函数

    摘要 在linux下,使用socketpair函数能够创建一对套节字进行进程间通信(IPC)。 函数原形: #include <sys/types.h> #include <sys/socket.h> int socketpair(int domain, int type, int protocol 相关代码 /*socketpair1.c*/ #include <sys/types.h> #include <sys/socket.h> #include <stdlib.h> #include <stdio.h > int main () { int sv[2]; int result = socketpair(AF_UNIX, SOCK_STREAM, 0, sv); if (result < 0){ exit

    1.8K20编辑于 2022-11-04
  • 来自专栏iKcamp

    系列3|走进Node.js之多进程模型

    socketpair 前文提到从进程实际上通过系统调用 execvp 启动新的 Node.js 实例;也就是说默认情况下,Node.js 主从进程不会共享文件描述符表,那它们到底是如何互发消息的呢? 原来,可以利用 socketpair 创建一对全双工匿名 socket,用于在进程间互发消息;其函数签名如下: int socketpair(int domain, int type, int protocol 其实,通过指定 socketpair 的第一个参数为 AF_UNIX,表示创建匿名 UNIX 域套接字(UNIX domain socket),这样就可以使用系统函数 sendmsg 和 recvmsg 进程级文件描述符表中,0-2分别是标准输入stdin、标准输出stdout和标准错误输出stderr,那么可用的第一个文件描述符就是3,socketpair 显然会占用从进程的第一个可用文件描述符。 前文提到系统函数 socketpair 可以创建一对双向 socket,能够用来发送 JSON 消息,这一块主要涉及到流操作;另外,当 sendHandle 有值时,它们还可以用于传递文件描述符,其过程要相对复杂一些

    1.6K70发布于 2018-03-30
  • 来自专栏码洞

    深入Python多进程通信原理与实战——图文

    os.waitpid(pid, 0) # 等待子进程结束 return math.sqrt(sum(sums) * 8) print pi(10000000) 输出 3.14159262176 无名套接字socketpair 上图为单进程的socketpair ? 上图为父子进程分离后的socketpair 为了解决这个问题,Unix系统提供了无名套接字socketpair,不需要端口也可以创建套接字,父子进程通过socketpair来进行全双工通信。 socketpair返回两个套接字对象,一个用于读一个用于写,它有点类似于pipe,只不过pipe返回的是两个文件描述符,都是整数。所以写起代码形式上跟pipe几乎没有什么区别。 range(10): # 分10个子进程 mink = unit * i maxk = mink + unit rsock, wsock = socket.socketpair

    76520发布于 2018-08-14
  • 来自专栏golang算法架构leetcode技术php

    nginx源码阅读(6)Master进程浅析

    nginx使用的是 socketpair 方法关联套接字,我们看看socketpair的原型: int socketpair(int d, int type, int protocol, int sv[ 2]); 我们关注一下第四个参数,当这个socketpair函数执行成功后,就会生成一个socket对在数组中,sv[2]中的socket是关联起来的,什么意思呢? nginx的具体的实现方式如上图所示: channel[0]和channel[0]为一对socketpair。 1. 向channel[0]写数据时,可从channel[1]读数据; 2. 而nginx,只利用了第一条,即master向channel[0]写数据时,worker可从channel[1]读数据 socketpair也用来进行父子进程的通信,子进程会继承父进程的资源。 第一步,由Master进程创建socket pair,即创建channel,利用socketpair函数,master进程processes数组中存储了master与新的work的channel信息。

    65021编辑于 2022-08-02
  • 来自专栏开发 & 算法杂谈

    Unix域协议学习小结

    socketpair函数 Linux提供了pipe函数用来创建匿名管道进行父子进程通信。但是pipe函数创建的管道是半双工的(要么读、要么写,不能够同时在一个管道中进行读写)。 不过Linux中全双工socketpair函数可实现对两个描述符中的任何一个同时进行读写。 该函数仅使用于Unix域套接字,函数描述如下所示: int socketpair(int domain, int type, int protocol, int sockfd[2]); 其中domain (AF_UNIX, SOCK_STREAM, 0, socket_pair) == -1) { printf("Error, socketpair create failed, errno(%d (AF_UNIX, SOCK_STREAM, 0, socket_pair) == -1) { printf("Error, socketpair create failed, errno(%d

    2.3K20发布于 2018-06-12
领券