Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all bug

名前

       socket - 通信のための端点 (endpoint) を作成する

書式

       #include <sys/types.h> /* 「注意」参照 */
       #include <sys/socket.h>

       int socket(int domain, int type, int protocol);

説明

       socket() は通信のための端点 (endpoint) を作成し、 ディスクリプターを返す。

       domain  引数は通信を行なうドメインを指定する;  これはどの  プロトコルファミリー  (protocol
       family) を通信に使用するかを指定する。 これらのファミリーは <sys/socket.h>  に定義されてい
       る。 現在、理解できるフォーマットは以下の通り。

       名前                目的                               マニュアル
       AF_UNIX, AF_LOCAL   ローカル通信                       unix(7)
       AF_INET             IPv4 インターネットプロトコル      ip(7)
       AF_INET6            IPv6 インターネットプロトコル      ipv6(7)
       AF_IPX              IPX - Novell プロトコル
       AF_NETLINK          カーネルユーザーインターフェース   netlink(7)
                           デバイス
       AF_X25              ITU-T X.25 / ISO-8208 プロトコル   x25(7)
       AF_AX25             アマチュア無線 AX.25 プロトコル
       AF_ATMPVC           生の ATM PVC にアクセスする
       AF_APPLETALK        AppleTalk                          ddp(7)
       AF_PACKET           低レベルのパケットインターフェー   packet(7)
                           ス
       AF_ALG              カーネルの暗号  API へのインター
                           フェース

       ソケットは type で指定される型を持ち、それは通信方式 (semantics) を指定する。 定義されてい
       る型は現在以下の通り。

       SOCK_STREAM     順序性と信頼性があり、双方向の、接続された  バイトストリーム (byte stream)
                       を提供する。 帯域外 (out-of-band) データ転送メカニズムもサポートされる。

       SOCK_DGRAM      データグラム (コネクションレス、信頼性無し、固定最大長メッセージ) をサポー
                       トする。

       SOCK_SEQPACKET  固定最大長のデータグラム転送パスに基づいた順序性、信頼性のある  双方向の接
                       続に基づいた通信を提供する。受け取り側ではそれぞれの入力  システムコールで
                       パケット全体を読み取ることが要求される。

       SOCK_RAW        生のネットワークプロトコルへのアクセスを提供する。

       SOCK_RDM        信頼性はあるが、順序は保証しないデータグラム層を提供する。

       SOCK_PACKET     廃止されており新しいプログラムで使用してはいけない。 packet(7)  を参照する
                       こと

       ある種のソケット型が全てのプロトコルファミリーで実装されているわけではない。

       Linux 2.6.27 以降では、 type 引数は二つ目の目的にも使用される。 ソケットの型を指定するのに
       加えて、 以下の値のいくつかをビット単位の論理和 (OR) で指定することで、 socket()  の振舞い
       を変更することができる。

       SOCK_NONBLOCK   新しく生成されるオープンファイル記述 (open file description) の O_NONBLOCK
                       ファイルステータスフラグをセットする。 このフラグを使うことで、 O_NONBLOCK
                       をセットするために fcntl(2) を追加で呼び出す必要がなくなる。

       SOCK_CLOEXEC    新しいファイルディスクリプターに対して close-on-exec (FD_CLOEXEC)   フラグ
                       をセットする。  このフラグが役に立つ理由については、 open(2)  の O_CLOEXEC
                       フラグの説明を参照のこと。

       protocol  はソケットによって使用される固有のプロトコルを指定する。通常それぞれの  ソケット
       は、与えられたプロトコルファミリーの種類ごとに一つのプロトコルのみを サポートする。 その場
       合は protocol に 0 を指定できる。 しかし、多くのプロトコルが存在してもかまわない。  この場
       合にはこの方法により固有のプロトコルを指定する必要がある。  使用されるプロトコル番号は通信
       の行なわれる“通信ドメイン”に 固有である; protocols(5)  を参照すること。 プロトコル名をどう
       やってプロトコル番号に対応させるかについては getprotoent(3)  を参照すること。

       SOCK_STREAM   型のソケットは全二重バイトストリームである。  これらはレコード境界を保存しな
       い。 ストリームは、ソケットがデータを送ったり受けたりする前に 接続された  状態になってなけ
       ればならない。他のソケットへの接続は  connect(2)  コールによって行なわれる。一度接続したら
       データは read(2)  と write(2)  コールや send(2)  と recv(2)   コールの変種を使用して転送で
       きる。  セッションが完了したら close(2) が行なわれる。帯域外データの転送も send(2)  に記述
       されており、 受信も recv(2)  に記述されている。

       SOCK_STREAM を実装した通信プロトコルはデータに損失や重複がないことを保証する。  もし相手の
       プロトコルがバッファー空間を持つ データの断片を適当な時間のうちに転送できなければ、 接続は
       断たれたとみなす。そのソケット SO_KEEPALIVE が有効になっている場合、プロトコル独自の方法で
       接続の相手側がまだ 有効であるかをチェックする。 もしプロセスが、壊れたストリームでデータを
       送受信しようとした場合には SIGPIPE シグナルが送られる;  これは通常のそのシグナルを扱ってい
       ないプロセスを  終了させる。  SOCK_SEQPACKET ソケットは SOCK_STREAM ソケットと同じシステム
       コールを使用する。 唯一の違いは read(2)   コールが要求された量のデータのみを返し、到着した
       パケットの残りの部分を    捨ててしまうことである。同様に入ってくるデータグラムの全てのメッ
       セージ境界は 保存される。

       SOCK_DGRAMSOCK_RAW ソケットは sendto(2) コールで指定された相手へデータグラムを送ること
       が許されている。 データグラムは一般に recvfrom(2)  で受けとり、 このコールは次のデータグラ
       ムを送信者のアドレスと一緒に返す。

       SOCK_PACKET は古いソケット型で、生(raw)のパケットをデバイスドライバから 直接受信するための
       ものである。 今は代わりに packet(7)  を用いること。

       fcntl(2)   の F_SETOWN 操作を使って、シグナル SIGURGSIGPIPE を受けとるプロセスグループ
       を指定できる。   SIGURG    シグナルは帯域外データが到着した時に、    SIGPIPE    シグナルは
       SOCK_STREAM 接続が予期せず切断された時に送られる。 また、 F_SETOWN 操作は、I/O や I/O イベ
       ントの非同期 (asynchronous) 通知を SIGIO  を経由で受け取るプロセスやプロセスグループを設定
       するのにも使用できる。  F_SETOWN  を使用することは  FIOSETOWN  または  SIOCSPGRP  の引数で
       ioctl(2)  を使用することと等価である。

       ネットワークがプロトコルモジュールにエラー状態を伝えた場合 (例えば、IP の ICMP  メッセージ
       を使用して)には、ソケットの ペンディングエラーフラグが設定される。次にこのソケットを操作し
       た 時にペンディングされていたエラーコードが返される。プロトコルによっては エラーについての
       より詳しい情報を受け取るためにソケットごとのエラーキューを      受け取ることが可能である。
       ip(7)  の IP_RECVERR を参照すること。

       ソケットの操作はソケットレベル    options    によって制御される。     これらのオプションは
       <sys/socket.h>  に定義されている。 setsockopt(2)  と getsockopt(2)  関数はそれぞれオプショ
       ンの設定と取得を行なう。

返り値

       成功した場合、新しいソケットのファイルディスクリプターを返す。  エラーが発生した場合は  -1
       を返し、 errno を適切に設定する。

エラー

       EACCES 指定されたタイプまたはプロトコルのソケットを作成する許可が与えられていない。

       EAFNOSUPPORT
              指定されたアドレスファミリーがサポートされていない。

       EINVAL 知らないプロトコル、または利用できないプロトコルファミリーである。

       EINVAL type に無効なフラグが指定されている。

       EMFILE プロセスのファイルテーブルが溢れている。

       ENFILE オープンされたファイルの総数がシステム全体の上限に達していた。

       ENOBUFS または ENOMEM
              十分なメモリーがない。十分な資源が解放されるまではソケットを   作成することはできな
              い。

       EPROTONOSUPPORT
              このドメインでは指定されたプロトコルまたはプロトコルタイプが サポートされていない。

       下位のプロトコルモジュールから他のエラーが生成されるかもしれない。

準拠

       4.4BSD, POSIX.1-2001.

       フラグ SOCK_NONBLOCK, SOCK_CLOEXEC は Linux 固有である。

       socket()  は 4.2BSD で登場した。一般に、(System V の変種を含めて)  BSD  のソケット層の互換
       性をサポートしている  BSD  以外のシステムへの、 または、BSD 以外のシステムからの移植ができ
       る。

注意

       POSIX.1-2001 では <sys/types.h>  のインクルードは必須とされておらず、  Linux  ではこのヘッ
       ダーファイルは必要ではない。  しかし、歴史的には、いくつかの実装  (BSD  系) でこのヘッダー
       ファイルが 必要であり、移植性が必要なアプリケーションではこのファイルを インクルードするの
       が賢明であろう。

       4.x BSD において定数を使用する場合、プロトコルファミリーには PF_UNIX, PF_INET 等を使用して
       いる。一方でアドレスファミリーには AF_UNIX, AF_INET 等が使用されている。 しかしながら  BSD
       のマニュアルでは  「一般にプロトコルファミリーは アドレスファミリーと同じものである。」 と
       保証している。 それ以外の規格では全ての場所で AF_* が使用されている。

       AF_ALG プロトコル種別は Linux 2.6.38  で追加された。  このインターフェースの詳しい情報は、
       カーネルのソースファイル Documentation/crypto/crypto-API-userspace.txt に書かれている。

       socket()  の利用例が getaddrinfo(3)  に記載されている。

関連項目

       accept(2),  bind(2),  connect(2), fcntl(2), getpeername(2), getsockname(2), getsockopt(2),
       ioctl(2), listen(2), read(2), recv(2),  select(2),  send(2),  shutdown(2),  socketpair(2),
       write(2), getprotoent(3), ip(7), socket(7), tcp(7), udp(7), unix(7)

       “An  Introductory  4.3BSD  Interprocess  Communication  Tutorial”  and  “BSD  Interprocess
       Communication Tutorial”, (UNIX Programmer's Supplementary Documents Volume 1. として再版さ
       れた)

この文書について

       この  man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。