ソケットは、1981 年以来 SunOS リリースに不可欠な部分となっています。ソケットは、名前を結合できる通信の終端です。ソケットにはタイプがあり、関連プロセスが 1 つ存在します。ソケットは、次のようなプロセス間通信のためのクライアントサーバーモデルを実装するために設計されました。
ネットワークプロトコルのインタフェースが、TCP/IP、Xerox インターネットプロトコル (XNS)、UNIX ファミリのような複数の通信プロトコルを提供する必要がある
ネットワークプロトコルのインタフェースが、コネクションを待機するサーバーコードとコネクションを開始するクライアントコードを提供する必要がある
通信がコネクション型であるかコネクションレス型であるかによって操作を変える必要がある
アプリケーションプログラムが、open(2) 呼び出しを使用してアドレスをバインドするのではなく、配信しようとしているデータグラムの着信先アドレスを指定する必要がある
ソケットは、UNIX ファイルのように動作し、ネットワークプロトコルが使用できるようにします。アプリケーションは、必要に応じてソケットを作成します。ソケットは、close(2)、read(2)、write(2)、ioctl(2)、および fcntl(2) インタフェースと連携して動作します。オペレーティングシステムは、ファイルの ファイル記述子とソケットのファイル記述子を区別します。
ソケットインタフェースルーチンは、アプリケーションとリンクが必要なライブラリ内に存在します。ライブラリ libsocket.so は、他のシステムサービスライブラリとともに /usr/lib にあります。libsocket.so は動的リンクに使用されます。
ソケットタイプには、ユーザーが認識できる通信プロパティを定義します。インターネットファミリソケットは、TCP/IP トランスポートプロトコルへのアクセスを提供します。インターネットファミリは、IPv6 と IPv4 の両方で通信できるソケットの場合、AF_INET6 という値で識別されます。また、以前のアプリケーションとのソース互換、および IPv4 に対する raw アクセスを目的とした値 AF_INET もサポートされています。
次に、SunOS 環境がサポートする 3 つのタイプのソケットを示します。
「ストリームソケット」は、プロセスが TCP を使用して通信できるようにします。ストリームソケットは、信頼性の高い、順序付けされた、重複のない双方向データフローをレコード境界なしで提供します。コネクションが確立されたあと、これらのソケットからのデータの読み取り、およびこれらのソケットに対するデータの書き込みがバイトストリームとして行えます。ソケットタイプは SOCK_STREAM です。
「データグラムソケット」は、プロセスが UDP を使用して通信できるようにします。データグラムソケットは、メッセージの双方向フローをサポートします。データグラムソケット側のプロセスは、送信シーケンスから順序を変えてメッセージを受信できます。データグラムソケット側のプロセスはまた、重複したメッセージも受信できます。データ内のレコード境界は保持されます。ソケットタイプは SOCK_DGRAM
です。
「raw ソケット」は、ICMP へのアクセスを提供します。このタイプのソケットは、通常、データグラム型ですが、実際の特性はプロトコルが提供するインタフェースに依存します。raw ソケットは、ほとんどのアプリケーションには使用されません。raw ソケットは、新しい通信プロトコルの開発をサポートしたり、既存プロトコルの難解な機能にアクセスしたりするために提供されています。raw ソケットを使用できるのは、スーパーユーザープロセスだけです。ソケットタイプは SOCK_RAW です。
詳細については、特定のプロトコルの選択を参照してください。
SunOS 5.9 プラットフォームは 2 つのソケットインタフェースセットを提供します。BSD ソケットインタフェース (SunOS バージョン 5.7 およびそれ以降のリリースで提供される) と XNS 5 (Unix98) ソケットインタフェースです。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)
従来の BSD ソケットの動作については、対応する 3N のマニュアルページを参照してください。さらに、マニュアルページのセクション 3N には、次のような新しいインタフェースが追加されました。
freeaddrinfo(3SOCKET)
freehostent(3SOCKET)
getaddrinfo(3SOCKET)
getipnodebyaddr(3SOCKET)
getipnodebyname(3SOCKET)
getnameinfo(3SOCKET)
inet_ntop(3SOCKET)
inet_pton(3SOCKET)