#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <linux/in.h>
void udp_test(int mode, const char *saddr,unsigned short port, const char* text)
{
int s = socket(AF_INET,SOCK_DGRAM,0);
if(s < 0)
{
printf("socket failed: %d\n",s);
return;
}
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr.s_addr = inet_addr(saddr);
int len = strlen(text);
int ret = 0;
if(mode == 0)
{
ret = sendto(s,text,len,0,(struct sockaddr*)&sin,sizeof(sin));
}else if(mode == 1)
{
struct msghdr msg;
struct iovec iov;
msg.msg_name = &sin;
msg.msg_namelen = sizeof(sin);
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
msg.msg_iov->iov_base = (char*)text;
msg.msg_iov->iov_len = len;
msg.msg_control = 0;
msg.msg_controllen = 0;
msg.msg_flags = 0;
ret = sendmsg(s,&msg,0);
}else if(mode == 2)
{
if(connect(s,(struct sockaddr*)&sin,sizeof(sin))<0)
{ printf("socket failed: %d",errno);
return;
}
ret = send(s,text,len,0);
}
printf("send %d byte to %s:%hu\n",ret,saddr,port);
close(s);
}
int main(int argc,const char **argv)
{
if(argc < 5)
{
return 1;
}
int msgid = atoi(argv[1]);
udp_test(atoi(argv[1]),argv[2],atoi(argv[3]),argv[4]);
return 0;
}