Man page - send(2)

Packages contains this manual

Available languages:

en fr tr ja ru zh_TW zh_CN

Manual

SEND

NAME
概 述
描 述
返 回 值
錯 誤 程 式 碼
兼 容 於
注 意
SEE ALSO
[中 文 版 維 護 人 ]
[中 文 版 最 新 更 新 ]
《 中 國 linux論 壇 man手 冊 頁 翻 譯 計 劃 》 :


NAME

send, sendto, sendmsg - 從 套 接 字 傳 送 訊 息

概 述

#include <sys/types.h>
#include <sys/socket.h>

int send(int s , const void * msg , size_t len , int flags );
int sendto(int
s , const void * msg , size_t len , int flags , const struct sockaddr * to , socklen_t tolen );
int sendmsg(int
s , const struct msghdr * msg , int flags );

描 述

Send , sendto , 和 sendmsg 用 於 向 另 一 個 套 接 字 傳 遞 訊 息 . Send 僅 僅 用 於 連 線 套 接 字 ,而 sendto sendmsg 可 用 於 任 何 情 況 下 .

目 標 地 址 用 to 指 定 , tolen 定 義 其 長 度 .訊 息 的 長 度 用 len 指 定 . 如 果 訊 息 太 長 不 能 透 過 下 層 協 議 ,函 式 將 返 回 EMSGSIZE 錯 誤 ,訊 息 也 不 會 被 送 出 .

在 資 料 傳 送 過 程 中 所 產 生 的 錯 誤 不 會 返 回 給 send. 如 果 發 生 本 地 錯 誤 ,則 返 回 -1.

當 要 傳 送 的 訊 息 長 度 大 於 套 接 字 當 前 可 用 緩 衝 區 時 , send 將 阻 塞 ,除 非 在 套 接 字 上 設 定 了 非 阻 塞 式 輸 入 輸 出 模 式 . 對 於 非 阻 塞 模 式 ,這 種 情 況 下 將 返 回 EAGAIN 錯 誤 . The 系 統 呼 叫 select (2) 可 以 用 來 檢 測 何 時 可 以 傳 送 更 多 的 資 料 .

引 數 flags 是 一 個 標 誌 字 ,可 以 包 含 下 列 標 誌 :
對 於 支 援 帶 外 資 料 的 套 接 字 ,

MSG_OOB 將 送 出 out-of-band (帶 外 )資 料 (比 如 , SOCK_STREAM 型 別 的 套 接 字 ); 下 層 協 議 也 必 須 支 援 . 帶 外 資 料 .

MSG_DONTROUTE

在 送 出 分 組 時 不 使 用 閘 道 器 .只 有 直 接 連 線 在 網 路 上 的 主 機 才 能 接 收 到 資 料 .這 個 標 誌 通 常 僅 用 於 診 斷 和 路 由 程 式 . 可 路 由 的 協 議 族 才 能 使 用 這 個 標 誌 ;包 套 接 字 不 可 以 .

MSG_DONTWAIT

使 用 非 阻 塞 式 操 作 ;如 果 操 作 需 要 阻 塞 ,將 返 回 EAGAIN 錯 誤 (也 可 以 用 F_SETFL fcntl(2) 設 定 O_NONBLOCK 實 現 這 個 功 能 .)

MSG_NOSIGNAL

當 流 式 套 接 字 的 另 一 端 中 斷 連 線 時 不 傳 送 SIGPIPE 訊 號 ,但 仍 然 返 回 EPIPE 錯 誤 .

MSG_CONFIRM (僅 用 於 Linux 2.3以 上 版 本 )

通 知 鏈 路 層 發 生 了 轉 發 過 程 :得 到 了 另 一 端 的 成 功 應 答 . 如 果 鏈 路 層 沒 有 收 到 通 知 ,它 將 按 照 常 規 探 測 網 路 上 的 相 鄰 主 機 (比 如 透 過 免 費 arp). 只 能 用 於 SOCK_DGRAM SOCK_RAW 型 別 的 套 接 字 ,且 僅 對 IPv4和 IPv6有 效 .詳 情 參 見 arp (7)

結 構 體 msghdr 的 定 義 如 下 .詳 情 參 見 recv (2) 和 下 文 .

struct msghdr {

void

* msg_name;

/*地 址 選 項 */

socklen_t

msg_namelen;

/*地 址 長 度 */

struct iovec

* msg_iov;

/*訊 息 陣 列 */

size_t

msg_iovlen;

/*msg_iov中 的 元 素 個 數 */

void

* msg_control;

/*輔 助 資 訊 ,見 下 文 */

socklen_t

msg_controllen;

/*輔 助 資 料 緩 衝 區 長 度 */

int

msg_flags;

/*接 收 訊 息 標 誌 */

};

可 以 使 用 msg_control msg_controllen 成 員 傳 送 任 何 控 制 資 訊 .核 心 所 能 處 理 的 最 大 控 制 訊 息 緩 衝 區 長 度 由 net.core.optmem_max sysctl對 每 個 套 接 字 進 行 限 定 ;參 見 socket (7).

返 回 值

成 功 時 返 回 傳 送 的 字 元 個 數 ,否 則 返 回 -1.

錯 誤 程 式 碼

其 中 一 些 是 套 接 字 層 產 生 的 標 準 錯 誤 .其 他 的 是 下 層 協 議 模 組 產 生 的 ;參 見 各 自 的 man手 冊 .

EBADF

指 定 了 非 法 描 述 符 .

ENOTSOCK

引 數 s 不 是 一 個 套 接 字 .

EFAULT

引 數 指 定 的 使 用 者 地 址 空 間 非 法 .

EMSGSIZE

訊 息 長 度 越 界 .

EAGAIN 或 者 EWOULDBLOCK

套 接 字 設 定 為 非 阻 塞 式 ,但 所 請 求 的 操 作 需 要 阻 塞 .

ENOBUFS

網 路 介 面 輸 出 佇 列 已 滿 .這 通 常 表 明 介 面 已 停 止 傳 送 ,也 有 可 能 是 暫 時 性 的 擁 擠 (這 不 會 發 生 在 linux下 ,當 裝 置 佇 列 溢 位 時 資 料 報 只 是 被 簡 單 丟 棄 .

EINTR

接 收 到 訊 號 .

ENOMEM

沒 有 可 用 記 憶 體 .

EINVAL

傳 遞 的 引 數 非 法 .

EPIPE

連 線 套 接 字 的 本 地 端 已 關 閉 .這 種 情 況 下 程 序 還 會 接 收 到 SIGPIPE 訊 號 ,除 非 設 定 了 MSG_NOSIGNAL

兼 容 於

4.4BSD,SVr4,POSIX1003.1g草 案 (這 些 系 統 呼 叫 首 次 出 現 於 4.2BSD). MSG_CONFIRM 是 Linux所 做 的 擴 充 套 件 .

注 意

上 面 給 出 的 函 式 原 型 遵 循 Single Unix Specification, glibc2也 是 這 麼 做 的 ; flags 引 數 在 BSD4.*中 是 ‘int’,但 在 libc4和 libc5中 是 ‘unsigned int’; 引 數 len 在 BSD4.*和 libc4中 是 ‘int’,但 在 libc5中 是 ’size_t’; 引 數 tolen 在 BSD4.*,libc4和 libc5中 都 是 ‘int’. 參 見 accept (2).

SEE ALSO

fcntl (2), recv (2), select (2), getsockopt (2), sendfile (2), socket (2), write (2), socket (7), ip (7), tcp (7), udp (7)

[中 文 版 維 護 人 ]

byeyear <love_my_love@263.net >

[中 文 版 最 新 更 新 ]

2002.02.27

《 中 國 linux論 壇 man手 冊 頁 翻 譯 計 劃 》 :

http://cmpp.linuxforum.net

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