sendto 子例程
用途
通过套接字发送消息。
库
标准 C 库 (libc.a)
语法
描述
森德 to 子例程允许应用程序通过未连接的套接字,通过指定目标地址来发送消息。
要在套接字上广播,首先使用 SO_BROADCAST 选项发出 塞佐克托特 子例程以获取广播许可权。
请使用 至 参数来提供目标的地址。 使用 长度 参数来指定消息的长度。 如果消息过长而无法通过底层协议,那么将返回错误 EMSGSIZE ,并且不会传输该消息。
如果 发送 套接字没有空间容纳要传输的消息,那么 森德 to 子例程将阻止该消息,除非该套接字处于非阻塞 I/O 方式。
请使用 选择 子例程来确定何时可以发送更多数据。
可以使用定义的 COMPAT_43 来编译套接字应用程序。 这将使 sockaddr 结构 BSD 4.3 兼容。 有关更多详细信息,请参阅 socket.h。
参数
| 项 | 描述 |
|---|---|
| 套接字 | 指定套接字的唯一名称。 |
| 消息 | 指定包含要发送的消息的地址。 |
| 长度 | 以字节为单位指定消息大小。 |
| 标志 | 允许发送方控制消息的传输。 用于发送调用的 标志 参数是通过对下列其中一个或两个值进行逻辑 OR 运算形成的:
注意:
/usr/include/sys/socket.h 文件定义 Flags 参数。 |
| 到 | 指定该消息的目标地址。 目标地址是 /usr/include/sys/socket.h 文件中定义的 sockaddr 结构。 |
| ToLength | 指定该目标地址的大小。 |
返回值
成功完成后, 森德 to 子例程返回发送的字符数。
如果 sendto子程序不成功,系统将返回-1 值,并设置 errno全局变量来指示错误。
错误代码
如果发生以下任何错误,那么该子例程不成功:
| 错误 | 描述 |
|---|---|
| EACCES | 对指定套接字的写访问被拒绝,或者尝试发送广播包的套接字不具有广播功能。 |
| EADDRNOTAVAIL | 指定的地址不是有效的地址。 |
| EAFNOSUPPORT | 对于此套接字的地址系列,指定的地址不是有效地址。 |
| EBADF | 插座 参数是无效的。 |
| ECONNRESET | 对等方强制关闭了连接。 |
| EDESTADRREQ | 该套接字未处于连接方式,并且未设置对等地址。 |
| Efault | 地址 参数未包含在用户地址空间的可写部分中。 |
| EHOSTUN联系 | 无法访问该目标主机。 |
| EINTR | 在传输任何数据之前,信号已中断 森德 to 。 |
| EINVAL | Length 或 ToLength 参数无效。 |
| EISCONN | 已连接 SOCK_DGRAM 套接字。 |
| EMSGSIZE | 消息太大,无法根据套接字的要求一次性发送所有消息。 |
| ENETUNREACH | 无法访问该目标网络。 |
| ENOBUFS | 对于内部数据结构,系统内存已耗尽。 |
| ENOENT | 路径名未对现有文件进行命名,或者路径名是空字符串。 |
| ENOMEM | 内存中的可用数据空间不够大,无法保存组 /ACL 信息。 |
| ENOPROTOOPT | 该协议不受 64 位支持。 |
| ENOTCONN | 该套接字处于连接方式,但未连接。 |
| ENOTSOCK | 插座 参数引用的是文件,而不是套接字。 |
| EOPNOTSUPP | 套接字自变量与不支持 标志中设置的一个或多个值的套接字关联。 |
| EPIPE | 尝试在已连接的套接字上发送,但该连接已由远程同级或该连接的此端关闭。 如果套接字的类型为 SOCK_STREAM,那么会向调用进程生成 SIGPIPE 信号。 |
| EWOULDBLOCK | 套接字标记为非阻塞,并且不存在要接受的连接。 |