折叠 编辑本段 sendmsg介绍
se来自nd,sendto,sendmsg360百科方法用于从套接字发送消息。
ssize_t send (int s, co化线由纸告皇镇认十nst void *说策评停燃做msg, size_t len, int fl括参验容而致统春铁依ags); ssize_t 帝脱降必化些前措话静sendto (int s, const void *msg, size_t len, int flags, const struct sockaddr *to, sockl西镇盐丝句en_t tolen); ssize_t sendmsg (int s, const struct msghdr *msg, int flags); |
send,sendto以及sendmsg系统调用用于发送消息到另一点乐顺班旧径清波个套接字。send氢何怀总就称挥朝吗反函数在套接字处于连接状态时方可使用。
而sendto和sendmsg在任何时候都可使用。
折叠 编辑本段 演示仍啊部玉技存提用法
下面的代码片段演示了send,sendto,sendm雷盟岁sg函数的用法:
#include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> void Recv() { struct sockaddr_in serv_addr; int sock_fd; char line[15] = "Hello world!"; int 段哥介但后着众穿联移河size = 13; se调象示会阳rv_addr.sin_family = AF_INET; serv_addr.四什兵液阻明示差到让sin_addr.s_addr = htonl(INADDR_LOOPBACK); serv_ad罗余哥衣dr.sin_port = htons(5000); sock_fd = socket零斗永(AF_INET,SOCK_STREAM,IPPROTO_TCP); connect(sock_fd,(struct sock钢级日且车背气临副苗addr*)&serv_addr,sizeof(serv_addr)); send(sock点裂培_fd, line, size, 0); close(sock_fd); } |
#include <sys/socket.h> #include <netinet/in.h> #查海破哪希独怕肥收叫include <unistd.h> void Sendto() { sockaddr_in receiver_addr; int sock_fd; char line[15] = "Hello World!"; sock_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); receiver_addr.sin_family = AF_INET; receiver_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); receiver_addr.sin_port = htons(5000); sendto(sock_fd, line, 13, 0,(struct sockaddr*)&receiver_addr,size评带取煤杀话of(receiver_addr)); close(s饭控奏花副率眼少江ock_fd); } |
#include <sys/so增cket.h> #include <netinet/in.h> #include <unistd.h> void 威友否紧乙久它都在主sendmsg() { struct sockad前参倒dr_in receiver_addr; int sock_fd; char line[15] = "Hello Wor头通雨说接奏非ld!"; struct msghdr msg; struct iovec iov; sock_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); receiver_addr.sin_family 就星= AF_INET; receiver_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); receiver_addr.sin_port = h核队烧早积tons(5000); msg.msg_name 晚= &receiver_addr; msg.msg验_namelen = sizeo哥巴称f(receiver_ad界款单给dr); msg.msg_iov = &iov; msg.msg_iovlen = 1; msg.msg_iov->iov_base = line; msg.msg_iov->iov_len = 13; msg.msg_control = 0; msg.msg_controllen = 0; msg.msg_flags = 0; sendmsg(sock_fd,&msg,0); close(sock_fd); } |