本文共 849 字,大约阅读时间需要 2 分钟。
【send/sendto/sendmsg系统调用】
功能描述:发送消息。send只可用于基于连接的套接 字,send 和 write唯一的不同点是标志的存在,当标志为0时,send等同于write。sendto 和 sendmsg既可用于无连接的套接字,也可用于基于连接的套接字。除了套接字设置为非阻塞模式,调用将会阻塞直到数据被发送完。
to:指向存放接收端地址的区域,可以为NULL。
tolen:以上内存区的长度,可以为0。msg:指向存放发送消息头的内存缓冲,结构形态如下struct msghdr {
void *msg_name;socklen_t msg_namelen;
struct iovec *msg_iov; size_t msg_iovlen; void *msg_control; socklen_t msg_controllen; int msg_flags; }; 可能用到的数据结构有struct cmsghdr {
socklen_t cmsg_len; int cmsg_level; int cmsg_type; }; 返回说明: 成功执行时,返回已发送的字节数。失败返回-1,errno被设为以下的某个值 EACCES:对于Unix域套接字,不允许对目标套接字文件进行写,或者路径前驱的一个目录节点不可搜索EAGAIN,EWOULDBLOCK: 套接字已标记为非阻塞,而发送操作被阻塞EBADF:sock不是有效的描述词ECONNRESET:连接被用户重置EDESTADDRREQ:套接字不处于连接模式,没有指定对端地址EFAULT:内存空间访问出错EINTR:操作被信号中断EINVAL:参数无效EISCONN:基于连接的套接字已被连接上,同时指定接收对象EMSGSIZE:消息太大ENOMEM:内存不足ENOTCONN:套接字尚未连接,目标没有给出ENOTSOCK:sock索引的不是套接字EPIPE:本地连接已关闭转载地址:http://licdi.baihongyu.com/