X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=stream.c;h=b97a670e77a10f78c5750c0c6ee9afd88b8f02b7;hb=85121cf5ceb381e5502a8f6cb6423d54c152cdfe;hp=1d4990dfcf7169d694d942db2c40bb52a9b51b96;hpb=537457c1f658162ba8f299cdfb89c4c1faad2315;p=my-code%2Fivac.git diff --git a/stream.c b/stream.c index 1d4990d..b97a670 100644 --- a/stream.c +++ b/stream.c @@ -23,9 +23,16 @@ /* 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) { @@ -33,17 +40,17 @@ 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,&local_addr,sizeof(struct sockaddr))==-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); @@ -54,21 +61,23 @@ int main(int argc, char *argv[]) { exit(1); } - if(send_fd=accept(listen_fd,(struct sockaddr *)remote_addr, - sizeof(struct sockaddr_in))!=1) { + 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), - 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"); printf("%d from %d total bytes sent.\n",send_bytes,read_bytes); }