#include #include #include #include #include #include #include #include #include #include #include #include #define PORT 5000 int serve(int sd); int run = 1; int main () { int lsd; int ret; struct sockaddr_in sin; int sin_size=sizeof(sin); int sd; int enable=1; char answr; int flag=0; if ((lsd=socket(AF_INET, SOCK_STREAM, 0))<0) { fprintf(stderr,"cannot screat listeing socket"); perror(0); exit(1); } setsockopt(lsd,SOL_SOCKET,SO_REUSEADDR,&enable,sizeof(int)); printf("Socket will bind to port %d\n", PORT); sin.sin_family=AF_INET; sin.sin_port=htons(PORT); sin.sin_addr.s_addr=htonl(INADDR_ANY); if (bind(lsd,&sin,sin_size)<0) { fprintf(stderr,"cannot bind listening socket"); perror(0); exit(1); } if (listen(lsd,15)<0) { fprintf(stderr,"cannot liste on socket"); perror(0); exit(1); } //int run = 1; while(run) { printf("Server: I am ready for connections\n"); if ((sd=accept(lsd,&sin,&sin_size))<0) exit(errno); printf("Incoming!Accept?(y/n)\n"); scanf("%c", &answr); while ((answr!='Y') && (answr!='y') && (answr!='n') && (answr!='N')) scanf("%c",&answr); if ((answr=='y') || (answr=='Y')) { write(sd,"accept",sizeof("accept")); printf("connection accepted\n"); ret=fork(); if (ret==0) serve(sd); else wait(NULL); } else if ((answr=='n') || (answr='N')) { write(sd,"quit",sizeof("quit")); printf("connection refused\n"); } shutdown(sd,2); close(sd); } shutdown(lsd,2); close(lsd); return 0; } int serve (int sd) { char c; int a; int i=0; FILE *rcv; rcv=fopen("receiveme","w"); if (rcv==NULL) { printf("sfalma stin dimiourgia arxeiou\n"); return -1; } sleep(1); a=read(sd,&c,sizeof(char)); printf("receiving..."); while (a!=0) { putc(c, rcv); a=read(sd,&c,sizeof(char)); i++; } printf("Complete!\n"); fclose(rcv); shutdown(sd,2); close(sd); char ch = getchar(); if (ch == 'q') run = 0; exit(0); }