Man page - socket(2)

Packages contains this manual

Available languages:

en fr tr ja ru zh_TW zh_CN de

Manual

SOCKET

名 字
概 要
描 述
返 回 值
錯 誤
相 容 性
注 意
例 子
參 見
COLOPHON


名 字

socket - 建 立 一 個 用 於 交 流 的 端 點

概 要

#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>

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

描 述

socket () 建 立 一 個 用 於 交 流 的 端 點 並 且 返 回 一 個 描 述 符 。

The domain 引 數 指 定 一 個 通 訊 域 名 ; 選 擇 的 協 議 將 會 用 於 通 訊 。 協 議 名 在 <sys/socket.h> 中 定 義 。 目 前 已 知 的 格 式 包 括 :

Image grohtml-689616-1.png

套 接 字 透 過 type , 引 數 來 確 定 通 訊 語 義 。 目 前 定 義 的 型 別 有 :

SOCK_STREAM

提 供 有 序 的 , 可 靠 的 , 雙 向 的 , 基 於 位 元 組 流 的 通 訊 。 可 能 支 援 帶 外 傳 輸 。

SOCK_DGRAM

提 供 資 料 報 ( 不 面 向 連 線 的 , 不 可 靠 的 固 定 最 大 長 度 的 資 訊 ) 。

SOCK_SEQPACKET

提 供 有 序 的 , 可 靠 的 , 雙 向 的 , 基 於 固 定 最 大 長 度 的 資 料 報 傳 輸 路 徑 ; 需 要 一 個 讀 取 整 個 伴 有 輸 入 系 統 呼 叫 的 包 的 使 用 者 。

SOCK_RAW

提 供 未 加 工 (raw)的 網 路 協 議 通 道 。

SOCK_RDM

提 供 可 靠 的 資 料 報 層 , 但 是 不 保 證 順 序 。

SOCK_PACKET

廢 棄 的 , 不 應 該 在 新 的 程 式 中 使 用 , 參 考 packet (7)。

一 些 套 接 字 型 別 並 未 被 所 有 的 協 議 實 現 ; 例 如 , SOCK_SEQPACKET 並 不 被 AF_INET AF_INET 實 現 。

從 Linux 2.6.27 開 始 , type 引 數 可 以 提 供 其 他 的 功 能 : 注 意 一 些 套 接 字 型 別 可 能 包 括 一 下 值 的 或 位 , 用 來 修 改 socket (): 的 行 為 。

SOCK_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 型 別 的 套 接 字 是 雙 向 直 接 資 料 流 的 , 和 管 道 十 分 相 似 。 他 們 不 對 記 錄 溢 位 提 供 保 護 。 一 個 套 接 字 流 在 接 受 或 發 出 任 何 資 料 時 必 須 處 於 connected 的 狀 態 。 和 其 它 套 接 字 透 過 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_DGRAM SOCK_RAW 型 別 的 套 接 字 支 援 用 sendto (2) 系 統 呼 叫 來 發 送 資 料 報 , 資 料 報 通 常 是 用 recvfrom (2), 來 接 受 的 , 這 個 呼 叫 會 在 下 一 個 資 料 報 中 單 獨 的 返 回 傳 送 者 的 地 址 。

SOCK_PACKET 是 一 個 遺 留 的 套 接 字 型 別 , 用 來 從 裝 置 驅 動 中 接 受 原 始 資 料 , 已 經 被 packet (7) 呼 叫 取 代 。

fcntl (2) 的 F_SETOWN 操 作 可 以 在 帶 外 資 料 到 達 時 讓 程 序 或 程 序 組 會 收 到 一 個 SIGURG 訊 號 , 或 者 在 SOCK_STREAM 型 別 的 連 線 在 被 不 期 望 地 打 斷 時 , 收 到 SIGPIPE 訊 號 。 這 個 操 作 也 可 能 被 用 於 讓 程 序 或 程 序 組 透 過 SIGIO . 接 收 I/O 和 I/O 不 同 步 的 通 知 。 使 用 F_SETOWN 等 同 於 使 用 了 FIOSETOWN SIOCSPGRP 引 數 的 ioctl (2) 系 統 呼 叫 。

當 網 路 向 協 議 模 型 發 出 一 個 錯 誤 情 況 的 訊 號 ( 例 如 , 對 IP使 用 ICMP訊 息 ) , 套 接 字 將 會 設 定 上 pending錯 誤 標 誌 。 對 套 接 字 接 下 去 的 操 作 將 會 返 回 pending錯 誤 的 錯 誤 程 式 碼 。 對 於 一 些 協 議 , 可 能 會 為 每 一 個 接 字 接 啟 用 一 個 用 於 取 出 詳 細 錯 誤 資 訊 的 錯 誤 列 隊 ; 參 見 ip (7) 中 的 IP_RECVERR

套 接 字 的 操 作 由 套 接 字 級 的 選 項 來 控 制 。 這 些 選 項 定 義 於 <sys/socket.h> 中 。 setsockopt (2)和 setsockopt (2) 用 於 分 別 用 於 設 定 和 讀 取 選 項 。

返 回 值

成 功 時 , 會 返 回 新 套 接 字 的 檔 案 描 述 符 。 錯 誤 時 , 返 回 -1 , 同 時 errno 會 被 適 當 設 定 。

錯 誤

EACCES

不 允 許 建 立 指 定 的 型 別 和 /或 指 定 的 協 議 的 套 接 字 。

EAFNOSUPPORT

工 具 不 支 援 指 定 的 地 址 。

EINVAL

未 知 協 議 , 或 協 議 組 不 可 用 。

EINVAL

錯 誤 的 type 標 誌 。

EMFILE

程 序 檔 案 表 溢 位 。

ENFILE

已 經 達 到 系 統 上 限 的 檔 案 開 啟 數 。

ENOBUFS ENOMEM

沒 有 足 夠 的 記 憶 體 , 直 到 有 可 用 的 資 源 套 接 字 不 能 被 建 立 。

EPROTONOSUPPORT

協 議 型 別 或 指 定 的 協 議 不 被 當 前 域 所 支 援 。

其 它 的 錯 誤 可 能 是 由 協 議 模 型 產 生 的 。

相 容 性

4.4BSD, POSIX.1-2001.

SOCK_NONBLOCK SOCK_CLOEXEC 標 誌 是 Linux 特 有 的 。 socket () appeared in 4.2BSD. 出 現 於 4.2BSD 。 通 常 , 非 BSD 系 統 的 BSD 套 接 字 層 克 隆 是 可 移 植 的 ( 包 括 System V 的 變 種 ) 。

注 意

並 不 要 求 包 含 <sys/types.h> , 這 個 標 頭 檔 案 在 Linux下 是 不 必 須 的 。 可 是 一 些 歷 史 上 的 (BSD) 工 具 要 求 這 個 標 頭 檔 案 , 可 移 植 程 式 很 可 能 希 望 包 含 它 。 4.x BSD下 明 顯 固 定 的 協 議 組 有 PF_UNIX, PF_INET, 等 等 , 但 是 AF_UNIX等 , 它 們 是 用 於 地 址 組 的 。 可 是 BSD的 man page保 證 “協 議 組 一 般 等 於 地 址 組 ”, 隨 後 的 標 準 在 每 個 地 方 都 使 用 了 AF_* 。

<sys/types.h> 檔 案 頭 只 在 libc4以 前 是 必 須 的 。 一 些 包 , 如 util-linux, claim, 是 用 於 在 所 以 Linux版 本 和 庫 上 可 移 植 的 。 它 們 確 實 需 要 這 個 標 頭 檔 案 。

例 子

getaddrinfo (3)。 中 有 一 個 使 用 socket () 的 例 子 。

參 見

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” 在 中 被 重 印 。

“BSD Interprocess Communication Tutorial” 在 UNIX Programmer’s Supplementary Documents Volume 1 中 被 重 印 。

COLOPHON

This page is part of release 3.27 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/. 譯 者 於 2011-07-26翻 譯 , 於 2013-02-08修 訂 譯 文 與 原 文 的 版 權 協 議 一 致

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。
中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh