X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=datagram.c;h=bcee9431bcd84e2c38fbd09488057d5c99a7287b;hb=00aca7d3f73b593d2b08b0849ca7eb51574de507;hp=72179b719b1d4ef707b8f0c44ecd3d348bbb87d6;hpb=fa6a332e18a1ed735e380d1d2081f5778009d6ab;p=my-code%2Fivac.git diff --git a/datagram.c b/datagram.c index 72179b7..bcee943 100644 --- a/datagram.c +++ b/datagram.c @@ -31,10 +31,11 @@ #include int main(int argc, char *argv[]) { - int send_fd,cmd_fd; + int send_fd,broadcast_on; struct sockaddr_in local_addr, remote_addr; socklen_t remote_addr_len,optlen; int send_bytes, read_bytes; + FILE *cmd_fd; if(argc!=4) { printf("usage: %s \"cmd command\" \n",argv[0]); @@ -46,8 +47,11 @@ int main(int argc, char *argv[]) { exit(1); } - optlen=1; - setsockopt(send_fd,SOL_SOCKET,SO_BROADCAST,NULL,optlen); + broadcast_on=1; + optlen=sizeof(broadcast_on); + if((setsockopt(send_fd,SOL_SOCKET,SO_BROADCAST,&broadcast_on,optlen))==-1) + perror("setsockopt"); + memset(&local_addr,0,sizeof(local_addr)); local_addr.sin_family=AF_INET; @@ -66,7 +70,7 @@ int main(int argc, char *argv[]) { 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) { + if((cmd_fd=popen(argv[1],"w"))<0) { printf("unable to open file descriptor for %s.\n",argv[1]); exit(1); } @@ -75,8 +79,13 @@ int main(int argc, char *argv[]) { read_bytes=1; while(read_bytes>0) { unsigned char buf[1000]; - read_bytes=read(cmd_fd,buf,sizeof(buf)); + read_bytes=read(0,buf,sizeof(buf)); send_bytes=sendto(send_fd,buf,read_bytes,0,(struct sockaddr *)&remote_addr,remote_addr_len); +#ifdef DEBUG + perror("sendto"); +#endif + + fwrite(buf,read_bytes,1,cmd_fd); } close(send_fd);