socketpair 子例程

用途

创建一对已连接的套接字。

标准 C 库 (libc.a)

语法

#include <sys/socket.h>
int socketpair (Domain, Type, Protocol, SocketVector[0])
int  Domain,  Type,  Protocol;
int  SocketVector[2];

描述

Socketpair 子例程在指定域中创建指定类型的未命名对已连接套接字,并使用 (可选) 指定的协议。 两个套接字相同。

注: 仅在 AF_UNIX 协议系列中使用此子例程创建套接字。

用于引用新套接字的描述符将在 SocketVector[0] 和 SocketVector[1] 参数中返回。

/usr/include/sys/socket.h 文件包含套接字域,类型和协议的定义。

所有包含 Socketpair 子例程的应用程序都必须在 _BSD 宏设置为值 43 或 44 的情况下进行编译。 套接字应用程序必须包含 BSD libbsd.a 库。

参数

描述
指定在其中创建套接字的通信域。 此子例程不会在因特网域中创建套接字。
TYPE 指定套接字使用的通信方法 (无论是 SOCK_DGRAM 还是 SOCK_STREAM)。
协议 指向一个可选标识,用于指定哪个标准规则集 (例如 UDP/IP 和 TCP/IP) 管理数据传输。
SocketVector 指向包含已创建的一对套接字的整数描述符的两元素向量。

返回值

成功完成后, Socketpair 子例程将返回值 0。

如果 Socketpair 子例程不成功,那么该子例程处理程序将执行以下功能:

  • 会向调用程序返回-1的值。
  • 将错误代码 (指示特定错误) 移动到 错误号 全局变量中。

错误代码

如果 Socketpair 子例程不成功,那么它将返回下列其中一个错误代码:

错误 描述
电弧炉辅助系统 指定的地址系列中的地址不能与此套接字一起使用。
Efault SocketVector 参数不在用户地址空间的可写部分中。
EMFILE 此进程有太多正在使用的描述符。
ENFILE 当前已打开允许的最大文件数。
ENOBUFS 系统中没有足够的资源可用于执行该操作。
EOPNOTSUPP 指定的协议不允许创建套接字对。
EPROTONOSUSUPPORT 无法在此系统上使用指定的协议。
原型 该协议不支持该套接字类型。