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 }

 

运行截图:

posted @ 2012-06-01 20:13  hp+y  Views(1765)  Comments(0Edit  收藏  举报