From e3c10bc9343baa5ea3dcc57063d28b3742479245 Mon Sep 17 00:00:00 2001 From: Ian C Date: Mon, 8 Nov 2010 15:34:07 +0000 Subject: Tidied up serv.c --- serv.c | 118 +++++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 63 insertions(+), 55 deletions(-) (limited to 'serv.c') diff --git a/serv.c b/serv.c index 276404c..e7bbcac 100644 --- a/serv.c +++ b/serv.c @@ -1,105 +1,113 @@ /* A simple server to attach to */ -#include - +#include #include +#include #include +#include + #include #include #include #include -char *name; -int sock_fd; -int connect_fd; +static const char *name; + +static int Socket(int p) +{ + struct sockaddr_in addr; + int sock_fd; + + if ((sock_fd=socket(AF_INET,SOCK_STREAM,0))==-1) + { + perror("socket"); + exit(EXIT_FAILURE); + } + + /* Bind port to address + */ + addr.sin_family=AF_INET; + addr.sin_addr.s_addr=INADDR_ANY; + addr.sin_port=htons(p); + + if (bind(sock_fd,(void*)&addr,sizeof(addr))==-1) + { + perror("bind"); + exit(EXIT_FAILURE); + } -void Socket(short); + if (listen(sock_fd,5)==-1) + { + perror("listen"); + exit(EXIT_FAILURE); + } -main(argc,argv) -int argc; -char *argv[]; + return sock_fd; +} +int main(int argc, char *argv[]) { struct sockaddr_in addr; char buff[1024]; int len; int addrlen; + int sock_fd; + int connect_fd; name=argv[0]; if (argc!=2) - { - fprintf(stderr,"%s: usage %s port\n",name,name); + { + fprintf(stderr,"%s: usage %s port\n", name, name); exit(1); - } + } - Socket((short)atoi(argv[1])); + sock_fd = Socket((short)atoi(argv[1])); printf("%s: socket bound\n",name); while(1) - { + { printf("%s: accepting\n",name); + if ((connect_fd=accept(sock_fd,NULL,0))==-1) - { - perror(name); + { + perror("accept"); exit(1); - } + } addrlen=sizeof(addr); - if (getsockname(connect_fd,&addr,&addrlen)!=0) - perror(name); + + if (getsockname(connect_fd,(void*)&addr,&addrlen)!=0) + { + perror("getsockname"); + } printf("%s: connection ON port %d\n",name,ntohs(addr.sin_port)); addrlen=sizeof(addr); - if (getpeername(connect_fd,&addr,&addrlen)!=0) - perror(name); + + if (getpeername(connect_fd,(void*)&addr,&addrlen)!=0) + { + perror("getpeername"); + } printf("%s: connection FROM port %d\n",name,ntohs(addr.sin_port)); while((len=read(connect_fd,buff,1024))>0) - { + { buff[len]=0; printf("%s: recieved '%s'\n",name,buff); - write(connect_fd,buff,len); - } - - perror(name); - - close(connect_fd); } - return(0); -} - - -void Socket(short p) -{ - struct sockaddr_in addr; - - if ((sock_fd=socket(AF_INET,SOCK_STREAM,0))==-1) + if (len == -1) { - perror(name); - exit(1); + perror("read"); } - /* Bind port to address - */ - addr.sin_family=AF_INET; - addr.sin_addr.s_addr=INADDR_ANY; - addr.sin_port=htons(p); - - if (bind(sock_fd,&addr,sizeof(addr))==-1) - { - perror(name); - exit(1); - } + close(connect_fd); + } - if (listen(sock_fd,5)==-1) - { - perror(name); - exit(1); - } + return EXIT_SUCCESS; } -- cgit v1.2.3