Linux系统调用之send/sendto/sendmsg函数解析
来源:互联网 发布:贵州数据资源 管理 编辑:程序博客网 时间:2024/06/06 04:47
【send/sendto/sendmsg系统调用】
功能描述:
发送消息。send只可用于基于连接的套接字,send 和 write唯一的不同点是标志的存在,当标志为0时,send等同于write。sendto 和 sendmsg既可用于无连接的套接字,也可用于基于连接的套接字。除了套接字设置为非阻塞模式,调用将会阻塞直到数据被发送完。
用法:
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int sock, const void *buf, size_t len, int flags);
ssize_t sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
ssize_t sendmsg(int sock, const struct msghdr *msg, int flags);
参数:
sock:索引将要从其发送数据的套接字。
buf:指向将要发送数据的缓冲区。
len:以上缓冲区的长度。
flags:是以下零个或者多个标志的组合体,可通过or操作连在一起
MSG_DONTROUTE:不要使用网关来发送封包,只发送到直接联网的主机。这个标志主要用于诊断或者路由程序。
MSG_DONTWAIT:操作不会被阻塞。
MSG_EOR:终止一个记录。
MSG_MORE:调用者有更多的数据需要发送。
MSG_NOSIGNAL:当另一端终止连接时,请求在基于流的错误套接字上不要发送SIGPIPE信号。
MSG_OOB:发送out-of-band数据(需要优先处理的数据),同时现行协议必须支持此种操作。
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://www.linuxidc.com/Linux/2007-11/9434p2.htm
- Linux系统调用之send/sendto/sendmsg函数解析
- Linux系统调用之send/sendto/sendmsg函数解析
- 【send/sendto/sendmsg系统调用】
- send/sendto/sendmsg系统调用
- 【send/sendto/sendmsg系统调用】
- send/sendto/sendmsg函数解析
- send/sendto/sendmsg函数解析
- Linux下send、sendto、sendmsg函数分析
- Linux下send、sendto、sendmsg函数分析
- Linux下send、sendto、sendmsg函数分析
- [LWIP学习]--send,sendto,sendmsg函数分析
- send/sendto/sendmsg
- write read;writev readv;recv send;recvfrom sendto;recvmsg sendmsg五组I/O函数汇总
- linux网络协议栈(六)传输层 (3)UDP协议 3)报文发送 send/sendto/sendmsg
- Open C 套接字: send, sendto, sendmsg 方法
- send, sendto, sendmsg - 从套接字发送消息
- UDP的send、sendto和sendmsg测试代码
- UDP的send、sendto和sendmsg测试代码
- ASP.NET 2.0客户端回调的实现分析(2)
- Linux网络编程一步一步学-设置非阻塞方式
- Prim 模板 hdu 1879
- UML类图关系全面剖析
- 基于jQuery的简单web选项卡
- Linux系统调用之send/sendto/sendmsg函数解析
- android 开发环境搭建(转载)
- BREW MIME机制与Android Activity Intent机制的比较
- 用于分拆字符串的表值函数--cross apply & outer apply
- DRM是什么
- Tracking Visitors with ASP.NET
- 网络爬虫-Heritrix 和 Nutch 比较与分析
- HTML中播放音乐
- What are the difference between DDL, DML and DCL commands?