/* A simple server to attach to */ #include #include #include #include #include #include #include char *name; int sock_fd; int connect_fd; void Socket(short); main(argc,argv) int argc; char *argv[]; { struct sockaddr_in addr; char buff[1024]; int len; int addrlen; name=argv[0]; if (argc!=2) { fprintf(stderr,"%s: usage %s port\n",name,name); exit(1); } 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); exit(1); } addrlen=sizeof(addr); if (getsockname(connect_fd,&addr,&addrlen)!=0) perror(name); printf("%s: connection ON port %d\n",name,ntohs(addr.sin_port)); addrlen=sizeof(addr); if (getpeername(connect_fd,&addr,&addrlen)!=0) perror(name); 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) { perror(name); exit(1); } /* 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); } if (listen(sock_fd,5)==-1) { perror(name); exit(1); } }