X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Fivac.git;a=blobdiff_plain;f=datagram.c;h=72179b719b1d4ef707b8f0c44ecd3d348bbb87d6;hp=83c4bc8d13674e8768c8a0709a3113b262d2bb61;hb=fa6a332e18a1ed735e380d1d2081f5778009d6ab;hpb=3cc99313fc75043c07720bf64e5ac76496057864 diff --git a/datagram.c b/datagram.c index 83c4bc8..72179b7 100644 --- a/datagram.c +++ b/datagram.c @@ -26,14 +26,18 @@ /* read, close */ #include +/* open */ +#include +#include + int main(int argc, char *argv[]) { - int send_fd; + int send_fd,cmd_fd; struct sockaddr_in local_addr, remote_addr; - socklen_t remote_addr_len; + socklen_t remote_addr_len,optlen; int send_bytes, read_bytes; - if(argc!=3) { - printf("usage: %s \n",argv[0]); + if(argc!=4) { + printf("usage: %s \"cmd command\" \n",argv[0]); exit(1); } @@ -42,15 +46,16 @@ int main(int argc, char *argv[]) { exit(1); } - // setsockopt(send_fd,SOL_SOCKET,SO_BROADCAST, + optlen=1; + setsockopt(send_fd,SOL_SOCKET,SO_BROADCAST,NULL,optlen); memset(&local_addr,0,sizeof(local_addr)); local_addr.sin_family=AF_INET; - local_addr.sin_port=htons(atoi(argv[2])); + local_addr.sin_port=htons(atoi(argv[3])); local_addr.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(send_fd,(struct sockaddr *)&local_addr,sizeof(local_addr))==-1) { - printf("unable to bind on port %d.\n",atoi(argv[1])); + printf("unable to bind on port %d.\n",atoi(argv[3])); perror("bind"); exit(1); } @@ -58,15 +63,20 @@ int main(int argc, char *argv[]) { remote_addr_len=sizeof(remote_addr); memset(&remote_addr,0,sizeof(remote_addr)); remote_addr.sin_family=AF_INET; - remote_addr.sin_port=htons(atoi(argv[2])); - remote_addr.sin_addr.s_addr=inet_addr(argv[1]); + remote_addr.sin_port=htons(atoi(argv[3])); + remote_addr.sin_addr.s_addr=inet_addr(argv[2]); + + if((cmd_fd=open(argv[1],O_RDONLY))<0) { + printf("unable to open file descriptor for %s.\n",argv[1]); + exit(1); + } /* send stuff .... */ read_bytes=1; while(read_bytes>0) { unsigned char buf[1000]; - read_bytes=read(0,buf,sizeof(buf)); - send_bytes=sendto(send_fd,buf,sizeof(buf),0,(struct sockaddr *)&remote_addr,remote_addr_len); + read_bytes=read(cmd_fd,buf,sizeof(buf)); + send_bytes=sendto(send_fd,buf,read_bytes,0,(struct sockaddr *)&remote_addr,remote_addr_len); } close(send_fd);