All pastes #901118 Raw Edit

server.c

public c v1 · immutable
·published 2008-02-12 12:41 UTC
rendered paste body
#include <sys/types.h>#include <sys/time.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <sys/select.h>#include <unistd.h>#include <errno.h>#include <stdlib.h>#include <string.h>#include <stdio.h>#include <sys/wait.h>#define PORT 5000int 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);}