自 1981 年以来,套接字已经成为 SunOS 发行版不可缺少的组成部分。套接字是可以绑定名称的通信端点。套接字具有 类型 和关联的进程。套接字是为实现用于进程间通信的客户机/服务器模型而设计的,其中:

网络协议的接口需要支持多个通信协议,如 TCP/IP、Xerox Internet 协议 (XNS) 以及 UNIX 系列。

网络协议的接口需要支持等待连接的服务器代码以及启动连接的客户机代码。

根据通信是面向连接的通信还是无连接通信,操作也不相同。

应用程序可能需要指定要传送的数据报的目标地址,而不是使用 open (2) 调用绑定此地址。

套接字使网络协议可用,并使其行为类似于 UNIX 文件。应用程序将根据需要创建套接字。套接字适用于 close (2) read (2) write (2) ioctl (2) 以及 fcntl (2) 接口。操作系统可区分文件的文件描述符和套接字的文件描述符。

套接字接口例程位于必须与应用程序链接的库中。 /usr/lib 中包含库 libsocket.so 以及其余系统服务库。 libsocket.so 用于动态链接。

套接字类型

套接字类型定义对于用户可见的通信属性。Internet 系列套接字提供对 TCP/IP 传输协议的访问。对于可以通过 IPv6 和 IPv4 进行通信的套接字,由值 AF_INET6 标识 Internet 系列。此外,还支持值 AF_INET ,目的是为了与旧应用程序的源代码兼容并提供对 IPv4 的原始访问。

SunOS 环境支持四种类型的套接字:

套接字。使用该套接字,进程可以使用 TCP 进行通信。流套接字提供没有记录边界的双向、可靠、有序且不重复的数据流。建立连接之后,可以将数据作为字节流在这些套接字中读取或写入。套接字类型为 SOCK_STREAM

数据报 套接字。使用该套接字,进程可以使用 UDP 进行通信。数据报套接字支持双向消息流。数据报套接字上的进程接收消息的顺序可能不同于发送消息的顺序。数据报套接字上的进程可能会接收重复消息。通过数据报套接字发送的消息可能会被丢弃。但数据中的记录边界会被保留。套接字类型为 SOCK_DGRAM

原始 套接字。该套接字提供对 ICMP 的访问。原始套接字还提供对联网栈不直接支持的其他基于 IP 的协议的访问。虽然这些套接字的确切特征取决于协议提供的接口,但是它们通常是面向数据报的套接字。原始套接字并不适用于大多数应用程序。提供原始套接字是为了支持开发新的通信协议,或者为了访问现有协议的更加深奥的功能。只有超级用户进程才能使用原始套接字。套接字类型为 SOCK_RAW

SEQ 套接字。该套接字支持 1 对 N 流控制传输协议 (Stream Control Transfer Protocol, SCTP) 连接。有关 SCTP 的更多详细信息,请参见 流控制传输协议

有关详细信息,请参见 选择特定的协议

SunOS 5.10 平台提供两组套接字接口。提供了 BSD 套接字接口,并且从 SunOS 版本 5.7 开始,还提供了 XNS 5 (UNIX03) 套接字接口。XNS 5 接口与 BSD 接口稍有不同。

以下手册页介绍了 XNS 5 套接字接口:

accept (3XNET)

bind (3XNET)

connect (3XNET)

endhostent (3XNET)

endnetent (3XNET)

endprotoent (3XNET)

endservent (3XNET)

gethostbyaddr (3XNET)

gethostbyname (3XNET)

gethostent (3XNET)

gethostname (3XNET)

getnetbyaddr (3XNET)

getnetbyname (3XNET)

getnetent (3XNET)

getpeername (3XNET)

getprotobyname (3XNET)

getprotobynumber (3XNET)

getprotoent (3XNET)

getservbyname (3XNET)

getservbyport (3XNET)

getservent (3XNET)

getsockname (3XNET)

getsockopt (3XNET)

htonl (3XNET)

htons (3XNET)

inet_addr (3XNET)

inet_lnaof (3XNET)

inet_makeaddr (3XNET)

inet_netof (3XNET)

inet_network (3XNET)

inet_ntoa (3XNET)

listen (3XNET)

ntohl (3XNET)

ntohs (3XNET)

recv (3XNET)

recvfrom (3XNET)

recvmsg (3XNET)

send (3XNET)

sendmsg (3XNET)

sendto (3XNET)

sethostent (3XNET)

setnetent (3XNET)

setprotoent (3XNET)

setservent (3XNET)

setsockopt (3XNET)

shutdown (3XNET)

socket (3XNET)

socketpair (3XNET)

相应的 3N 手册页介绍了传统的 BSD 套接字行为。此外,3N 节中还添加了以下新接口:

freeaddrinfo (3SOCKET)

freehostent (3SOCKET)

getaddrinfo (3SOCKET)

getipnodebyaddr (3SOCKET)

getipnodebyname (3SOCKET)

getnameinfo (3SOCKET)

inet_ntop (3SOCKET)

inet_pton (3SOCKET)

有关生成使用 XNS 5 (UNIX03) 套接字接口的应用程序的信息,请参见 standards (5) 手册页。