套接字子例程

用途

创建用于通信的端点,并返回描述符。

标准 C 库 (libc.a)

语法

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
int socket ( AddressFamily,  Type,  Protocol)
int AddressFamily, Type, Protocol;

描述

socket 子例程在指定的 AddressFamily 和指定类型中创建套接字。 可以由系统指定或指定协议。 如果未指定协议 (值为 0) ,那么系统将从地址系列中可用于支持请求的套接字类型的那些协议中选择适当的协议。

套接字 子例程返回一个描述符 (整数) ,该描述符可用于稍后对套接字进行操作的子例程。

套接字级别选项控制套接字操作。 getsockoptsetsockopt 子例程用于获取和设置这些选项,这些选项在 /usr/include/sys/socket.h 文件中定义。

参数

描述
AddressFamily 指定一个地址系列,后面的套接字操作中指定的地址应使用该地址系列进行解释。 /usr/include/sys/socket.h 文件包含地址系列的定义。 常用的系列有:
AF_UNIX
表示操作系统的路径名。
AF_INET
表示 ARPA 因特网地址。
AF_INET6
表示 IPv6IPv4 地址。
AF_NS
表示 XEROX 网络系统协议。
AF_BYPASS
表示内核旁路协议域 (例如,在 InfiniBand 域上运行的协议)。
TYPE 指定通信的语义。 /usr/include/sys/socket.h 文件定义套接字类型。 该操作系统支持下列类型:
SOCK_STREAM
通过针对频带外数据的传输机制,提供顺序的双向字节流。
SOCK_DGRAM
提供数据报,这些数据报是固定最大长度 (通常较短) 的无连接消息。
SOCK_RAW
提供对内部网络协议和接口的访问。 此类型的套接字仅对 root 用户可用,或者对具有 CAP_NUMA_ATTACH 功能的非 root 用户可用。 (对于非 root 用户原始套接字访问, CAP_NUMA_ATTACH 功能以及 CAP_PROPAGATE 是使用 chuser 命令分配的。)
SOCK_SEQPACKET
提供顺序有序,可靠且未重复的信息流。 此类型的套接字用于在 "流控制传输协议" 和 "可靠数据报套接字" (RDS) 协议的情况下创建 UDP 样式的套接字。
协议 指定要与套接字配合使用的特定协议。 将 协议 参数 0 为 0 会导致 套接字 子例程缺省为所请求的返回套接字类型的典型协议。 对于 SCTP 套接字,协议参数为 IPPROTO_SCTP。 对于 RDS 套接字, Protocol 参数为 BYPASSPROTO_RDS。

返回值

成功完成后, 套接字 子例程将返回整数 (套接字描述符)。

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

  • 会向调用程序返回-1的值。
  • 将错误代码 (指示特定错误) 移动到 错误号 全局变量中。 有关 错误号 变量的进一步说明,请参阅 错误通知对象类

错误代码

如果发生以下任何错误,那么 套接字 子例程不成功:

错误 描述
EAFNOSUPPORT 指定的地址系列中的地址不能与此套接字一起使用。
EMFILE 每个进程描述符表都已已满。
ENOBUFS 系统中没有足够的可用资源来完成调用。
esocktnosupport 不支持指定地址系列中的套接字。

示例

以下程序片段说明了如何使用 套接字 子例程来创建数据报套接字以在机器上使用:

s = socket(AF_UNIX, SOCK_DGRAM,0);

实现细节

套接字子例程是基本操作系统 (BOS) 运行时的一部分。

可以使用定义的 COMPAT_43 来编译套接字应用程序。 这将使 sockaddr 结构 BSD 4.3 兼容。 有关更多详细信息,请参阅 socket.h