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

名前

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

書式

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

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

説明

       socket()   creates  an  endpoint  for  communication  and  returns  a file descriptor that refers to that
       endpoint.  The file descriptor returned by a successful call will be the lowest-numbered file  descriptor
       not currently open for the process.

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

       名前         目的                                       マニュアル
       AF_UNIX      ローカル通信                               unix(7)
       AF_LOCAL     Synonym for AF_UNIX
       AF_INET      IPv4 インターネットプロトコル              ip(7)
       AF_AX25      アマチュア無線 AX.25 プロトコル            ax25(4)
       AF_IPX       IPX - Novell プロトコル
       AF_APPLETALK AppleTalk                                  ddp(7)
       AF_X25       ITU-T X.25 / ISO-8208 プロトコル           x25(7)
       AF_INET6     IPv6 インターネットプロトコル              ipv6(7)
       AF_DECnet    DECet protocol sockets
       AF_KEY       Key   management   protocol,  originally
                    developed for usage with IPsec
       AF_NETLINK   カーネルユーザーインターフェースデバイス   netlink(7)
       AF_PACKET    低レベルのパケットインターフェース         packet(7)
       AF_RDS       Reliable Datagram Sockets (RDS) protocol   rds(7)
                                                               rds-rdma(7)
       AF_PPPOX     Generic PPP transport layer, for setting
                    up L2 tunnels (L2TP and PPPoE)
       AF_LLC       Logical  link  control  (IEEE 802.2 LLC)
                    protocol
       AF_IB        InfiniBand native addressing
       AF_MPLS      Multiprotocol Label Switching
       AF_CAN       Controller Area Network  automotive  bus
                    protocol
       AF_TIPC      TIPC, "cluster domain sockets" protocol
       AF_BLUETOOTH Bluetooth low-level socket protocol
       AF_ALG       カーネルの暗号 API へのインターフェース
       AF_VSOCK     VSOCK   (originally  "VMWare  VSockets")   vsock(7)
                    protocol      for       hypervisor-guest
                    communication
       AF_KCM       KCM   (kernel   connection  multiplexer)
                    interface
       AF_XDP       XDP (express data path) interface

       Further details of the above address families, as well as information on several other address  families,
       can be found in address_families(7).

       ソケットは  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   Set the O_NONBLOCK file status flag on the open file description (see open(2))   referred
                       to by the new file descriptor.  Using this flag saves extra calls to fcntl(2)  to achieve
                       the same result.

       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 1プロセスがオープンできるファイルディスクリプター数の上限に達した。

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

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

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

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

準拠

       POSIX.1-2001, POSIX.1-2008, 4.4BSD.

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

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

注意

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

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

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

関連項目

       accept(2),  bind(2),  close(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), address_families(7), 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 プロジェクトのリリース 5.10  の一部である。プロジェクトの説明とバグ報告
       に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。