Manpages

NAME (名 字 )

udp - IPv4 上 面 的 UDP 协 议 .

SYNOPSIS (总 览 )

#include <sys/socket.h>
#include <netinet/in.h>
udp_socket = socket(PF_INET, SOCK_DGRAM, 0);

DESCRIPTION(描 述 )

这 是 一 个 RFC768 中 的 用 户 数 据 报 协 议 的 实 现 . 它 实 现 无 连 接 的 , 不 可 靠 的 数 据 报 信 息 包 服 务 . 信 息 包 可 能 在 它 们 传 输 到 达 之 前 重 新 排 序 或 者 重 复 . UDP 通 过 生 成 和 检 查 校 验 和 来 俘 获 传 输 错 误 . 当 创 建 一 个 UDP 套 接 字 时 , 它 的 本 地 和 远 程 地 址 是 不 确 定 的 . 可 以 使 用 带 一 个 有 效 目 的 地 址 作 为 参 数 的 sendto(2) 或 者 sendmsg(2) 立 即 发 送 数 据 报 .如 果 套 接 字 上 调 用 了 connect(2) 时 , 则 设 置 默 认 的 目 的 地 址 , 数 据 报 可 以 使 用 send(2) 或 者 write(2) 发 送 而 不 需 要 指 定 目 的 地 址 . 也 可 以 通 过 传 递 一 个 地 址 给 sendto(2) 或 者 sendmsg(2) 来 发 送 到 其 它 目 的 地 址 . 为 了 接 收 信 息 包 ,套 接 字 必 须 首 先 用 bind(2) 绑 定 一 个 本 地 地 址 , 如 果 没 有 这 么 做 , 套 接 字 层 在 第 一 个 用 户 接 收 请 求 时 将 自 动 分 配 一 个 本 地 端 口 . 所 有 接 收 操 作 只 返 回 一 个 信 息 包 . 当 信 息 包 小 于 所 传 递 的 缓 冲 区 时 , 则 只 返 回 那 些 数 据 , 当 信 息 包 大 于 所 传 递 的 缓 冲 区 时 ,则 截 断 信 息 包 并 设 置 MSG_TRUNC 标 志 .

IP 选 项 可 以 使 用 描 述 于 ip(7) 中 的 套 接 字 选 项 发 送 或 接 收 . 只 有 打 开 了 合 适 的 sysctl 时 , 内 核 才 处 理 它 们 (不 过 即 使 关 闭 了 它 们 , 仍 然 会 传 递 给 用 户 ). 参 见 ip(7). 如 果 设 置 了 MSG_DONTROUTE 标 志 ,则 发 送 时 目 的 地 址 必 须 指 向 一 个 本 地 接 口 地 址 , 而 且 信 息 包 只 发 到 该 接 口 . 当 UDP 的 总 长 超 过 接 口 MTU(Maximum Transmission Unit 最 大 传 输 单 元 )时 , UDP 会 对 信 息 包 进 行 分 段 . 一 个 更 为 网 络 友 好 的 可 选 方 法 是 使 用 path MTU discovery(路 径 MTU发 现 ), 它 描 述 于 ip(7) 中 的 IP_PMTU_DISCOVER 部 分 .

ADDRESS FORMAT (地 址 格 式 )

UDP 使 用 IPv4 的 sockaddr_in 地 址 格 式 ,其 描 述 于 ip(7) 中 .

ERROR HANDLING (错 误 处 理 )

所 有 重 大 错 误 都 会 以 错 误 返 回 值 的 方 式 传 递 给 用 户 , 即 使 套 接 字 没 有 连 接 亦 如 此 .这 种 处 理 方 式 有 别 于 许 多 其 它 的 BSD 套 接 字 实 现 方 法 , 除 非 套 接 字 连 接 上 , 否 则 那 些 方 法 不 会 传 递 任 何 错 误 , Linux 的 处 理 方 式 遵 循 RFC1122 的 要 求 . 为 了 与 以 前 的 代 码 兼 容 ,可 以 设 置 SO_BSDCOMPAT SOL_SOCKET 选 项 令 只 在 套 接 字 已 连 接 的 情 况 下 接 收 远 程 错 误 ( EPROTOEMSGSIZE) 除 外 . 最 好 是 修 复 代 码 并 适 当 地 处 理 错 误 , 而 不 要 打 开 该 选 项 . 本 地 产 生 的 错 误 总 是 传 递 . 当 打 开 了 IP_RECVERR 选 项 时 , 所 有 错 误 可 以 存 储 在 套 接 字 错 误 队 列 中 , 并 可 以 通 过 带 MSG_ERRQUEUE 标 识 设 置 的 recvmsg(2) 来 接 收 .

ERRORS (错 误 )

所 有 列 在 socket(7)ip(7) 中 的 错 误 都 可 以 在 一 个 UDP 套 接 字 上 收 发 时 收 到 .

ECONNREFUSED 没 有 与 目 的 地 址 相 关 联 的 接 收 者 . 这 可 能 由 于 在 前 面 一 个 通 过 该 套 接 字 发 送 的 信 息 包 而 引 发 .

VERSIONS(版 本 )

IP_RECVERR 是 Linux 2.2 中 的 新 功 能 .

CREDITS(尾 注 )

本 手 册 页 的 作 者 为 Andi Kleen.

SEE ALSO(另 见 )

ip(7), socket(7), raw(7).

RFC768: 用 户 数 据 报 协 议 .
RFC1122: 主 机 需 求
RFC1191: 描 述 path MTU discovery (路 径 MTU查 找 ).

[中 文 版 维 护 人 ]

riser <boomer [AT] ccidnet.com>

[中 文 版 最 新 更 新 ]

2001/07/19

《 中 国 linux论 坛 man手 册 页 翻 译 计 划 》 :

http://cmpp.linuxforum.net

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh