2024年4月16日发(作者:)
linux的send命令
linux下的send命令可用于基于连接的套接字,下面由店铺为大
家整理了linux的send命令的相关知识,希望对大家有帮助!
linux的send命令详解
功能描述:发送消息,send只可用于基于连接的套接字,send
和 write唯一的不同点是标志的存在,当标志为0时,send等同于
write。sendto 和 sendmsg既可用于无连接的套接字,也可用于基于
连接的套接字。除了套接字设置为非阻塞模式,调用将会阻塞直到数
据被发送完。
用法:
#include
#include
1
2
ssize_t send(int
sock, const
void
*buf, size_t
len, int
flags
3
);
4
ssize_t sendto(int
sock, const
void
*buf, size_t
len, int
fla
5
gs, const
struct
sockaddr *to, socklen_t tolen);
6
ssize_t sendmsg(int
sock, const
struct
msghdr *msg, int
flags
);
linux的send命令参数
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;
};


发布评论