sendto 子例程

用途

通过套接字发送消息。

标准 C 库 (libc.a)

语法

#include <sys/socket.h>
int sendto
(Socket, Message, Length,
Flags, To, ToLength)
int  Socket;
const void * Message;
size_t  Length;
int  Flags;
const struct sockaddr * To;
socklen_t  ToLength;

描述

森德 to 子例程允许应用程序通过未连接的套接字,通过指定目标地址来发送消息。

要在套接字上广播,首先使用 SO_BROADCAST 选项发出 塞佐克托特 子例程以获取广播许可权。

请使用 参数来提供目标的地址。 使用 长度 参数来指定消息的长度。 如果消息过长而无法通过底层协议,那么将返回错误 EMSGSIZE ,并且不会传输该消息。

如果 发送 套接字没有空间容纳要传输的消息,那么 森德 to 子例程将阻止该消息,除非该套接字处于非阻塞 I/O 方式。

请使用 选择 子例程来确定何时可以发送更多数据。

可以使用定义的 COMPAT_43 来编译套接字应用程序。 这将使 sockaddr 结构 BSD 4.3 兼容。 有关更多详细信息,请参阅 socket.h

参数

描述
套接字 指定套接字的唯一名称。
消息 指定包含要发送的消息的地址。
长度 以字节为单位指定消息大小。
标志 允许发送方控制消息的传输。 用于发送调用的 标志 参数是通过对下列其中一个或两个值进行逻辑 OR 运算形成的:
MSG_OOB
处理支持 SOCK_STREAM的套接字上的频带外数据。
注意:
MSG_DONTROUTE
不使用路由表发送。

/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 LengthToLength 参数无效。
EISCONN 已连接 SOCK_DGRAM 套接字。
EMSGSIZE 消息太大,无法根据套接字的要求一次性发送所有消息。
ENETUNREACH 无法访问该目标网络。
ENOBUFS 对于内部数据结构,系统内存已耗尽。
ENOENT 路径名未对现有文件进行命名,或者路径名是空字符串。
ENOMEM 内存中的可用数据空间不够大,无法保存组 /ACL 信息。
ENOPROTOOPT 该协议不受 64 位支持。
ENOTCONN 该套接字处于连接方式,但未连接。
ENOTSOCK 插座 参数引用的是文件,而不是套接字。
EOPNOTSUPP 套接字自变量与不支持 标志中设置的一个或多个值的套接字关联。
EPIPE 尝试在已连接的套接字上发送,但该连接已由远程同级或该连接的此端关闭。 如果套接字的类型为 SOCK_STREAM,那么会向调用进程生成 SIGPIPE 信号。
EWOULDBLOCK 套接字标记为非阻塞,并且不存在要接受的连接。