X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=stream.c;h=b97a670e77a10f78c5750c0c6ee9afd88b8f02b7;hb=c8863c0b9719b8dd511782494bebe85e802be45c;hp=b62f5713cb3b26bee4554517b994ee47b8a7f7e3;hpb=f132c66f296623bbb2504a762514629f8508a729;p=my-code%2Fivac.git diff --git a/stream.c b/stream.c index b62f571..b97a670 100644 --- a/stream.c +++ b/stream.c @@ -20,10 +20,19 @@ /* inet_ntoa ... */ #include +/* errno stuff ... */ +#include + +/* read, close */ +#include + +/* defines ... */ +#define MAX_SIZE 1000 int main(int argc, char *argv[]) { int listen_fd, send_fd; - struct sockaddr_in local_addr, *remote_addr; + struct sockaddr_in local_addr, remote_addr; + socklen_t remote_addr_len; int send_bytes, read_bytes; if(argc!=2) { @@ -31,18 +40,19 @@ int main(int argc, char *argv[]) { exit(1); } - if(listen_fd=socket(AF_INET,SOCK_STREAM,0) == -1) { + if((listen_fd=socket(AF_INET,SOCK_STREAM,0)) == -1) { printf("can't open socket.\n"); exit(1); } - + + memset(&local_addr,0,sizeof(local_addr)); local_addr.sin_family=AF_INET; local_addr.sin_port=htons(atoi(argv[1])); local_addr.sin_addr.s_addr=htonl(INADDR_ANY); - memset(&(local_addr.sin_zero),'\0',8); - if(bind(listen_fd,(struct sockaddr)&local_addr,sizeof(struct sockaddr))==-1) { - printf("unable to bind on port %d.\n",atoi(argv[1]); + if(bind(listen_fd,(struct sockaddr *)&local_addr,sizeof(local_addr))==-1) { + printf("unable to bind on port %d.\n",atoi(argv[1])); + perror("bind"); exit(1); } @@ -51,22 +61,25 @@ int main(int argc, char *argv[]) { exit(1); } - if(send_fd=accept(listen_fd,(struct sockaddr *)remote_addr, - sizeof(struct sockaddr_in)) { + remote_addr_len=sizeof(remote_addr); + if((send_fd=accept(listen_fd,(struct sockaddr *)&remote_addr, + &remote_addr_len))!=-1) { printf("accepting connection from %s port %d.\n", - inet_ntoa(remote_addr->sin_addr.s_addr), - ntohs(remote_addr->sin_port)); + inet_ntoa(remote_addr.sin_addr), + ntohs(remote_addr.sin_port)); /* send stuff .... */ read_bytes=1; while(read_bytes>0) { - char buf[1000]; - read_bytes=read(stdin,(void *)buf,sizeof(buf)); - send_bytes=send(send_fd,buf,sizeof(buf),0); + unsigned char buf[MAX_SIZE]; + read_bytes=read(0,buf,sizeof(buf)); + send_bytes=send(send_fd,buf,read_bytes,0); } close(send_fd); + close(listen_fd); printf("connection closed ...\n"); - prinrf("%d from %d total bytes sent.\n",send_bytes,read_bytes); - return 0; + printf("%d from %d total bytes sent.\n",send_bytes,read_bytes); + } + return 0; }