创建互联socket对:socketpair()
单个进程创建一对socket
并将它们连接起来是比较有用的。这可以通过使用两个socket()
调用和一个bind()
调用以及对listen()
,connect()
,accept()
(用于流socket
)的调用或对connect()
(用于数据报socket
)的调用来完成。
socketpair()
系统调用则为这个操作提供一个快捷方式。
#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int sockfd[2]);
//return 0 on success, or -1 on error
domain
参数必须被指定为AF_UNIX
,socket
的type
可以被指定为SOCK_DGRAM
或SOCK_STREAM
。protocol
参数必须为0。sockfd
数组返回了引用在这两个相互连接的socket
的文件描述符。
将type
指定为SOCK_STREAM
相当于创建一个双向管道。每个socket
都可以用来读取和写入,并且这两个socket
之间每个方向上的数据信道是分开的。
一般来说,socket
对的使用方式与管道的使用方式类似。在调用完sockpair()
之后,进程会使用fork()
创建一个子进程。子进程会继承父进程的文件描述符的副本,包括引用socket
对的描述符。父进程和子进程就可以使用这一对socket
来进行IPC。
使用socketpair()
创建一对socket
与手工创建一对相互连接的socket
这两种做法之间的一个差别在于前一对socket
不会被绑定到任意地址上。