socketpair
socketpair 的用法
函数原型:
int socketpair(int domain, int type, int protocol, int filedes[2]);
/*************************************************/
参数说明:
domain: 套接字存在的通信域
AF_UNIX
AF_INET
type: 套接字类型
SOCK_STREAM
SOCK_DGRAM
SOCK_SEQPACKET
SOCK_RAW
protocol: 协议
大部分情况下都指定该参数为 0,
可以为 TCP、 UDP
filedes[2] : 一对套接字描述字
/*************************************************/
实例:
1 #include <stdio.h> 2 #include <sys/socket.h> 3 #include <sys/unistd.h> 4 #include <string.h> 5 #include <stdlib.h> 6 7 int main(void) 8 { 9 int sockets[2]; 10 int child; 11 char buf[1024]; 12 char data1[100]; 13 char data2[100]; 14 strcpy(data1, "What's you name ?\n"); 15 strcpy(data2, "Huzy !\n"); 16 17 /* 创建套接字偶对 */ 18 if(socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) < 0) 19 { 20 printf("Socketpair error!\n"); 21 exit(-1); 22 } 23 24 /* 创建子进程 */ 25 if( (child = fork()) == -1 ) 26 { 27 printf("Fork error!\n"); 28 exit(-1); 29 } 30 31 /* 父进程 */ 32 if(child != 0) 33 { 34 // 关闭子进程的套接字 35 close(sockets[0]); 36 37 // 读取来自子进程的数据 38 if( read(sockets[1], buf, sizeof(buf)) < 0 ) 39 printf("Reading sockets error !\n"); 40 41 printf("Parent process %d received request : %s\n", getpid(), buf); 42 43 // 向子进程写数据 44 if(write(sockets[1], data2, sizeof(data2)) < 0) 45 printf("Writing socket error !\n"); 46 47 // 关闭父进程套接字 48 close(sockets[1]); 49 } 50 51 /* 子进程 */ 52 else 53 { 54 // 关闭父进程的套接字 55 close(sockets[1]); 56 57 // 向父进程写入数据 58 if( write(sockets[0], data1, sizeof(data1)) < 0 ) 59 printf("Writing socket error !\n"); 60 61 // 读取来自父进程的数据 62 if( read(sockets[0], buf, sizeof(buf)) < 0) 63 printf("Reading socket error !\n"); 64 65 printf("Child process %d receied answer : %s\n", getpid(), buf); 66 67 // 关闭子进程套接字 68 close(sockets[0]); 69 } 70 }
运行截图: