All pastes #354891 Raw Edit

nox

public c v1 · immutable
·published 2007-02-14 05:43 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/wait.h>#include <signal.h>#define PORT 20000#define MAXDATASIZE 256#define MYPORT 20000  #define BACKLOG 10 void sigchld_handler(int s){    while(waitpid(-1, NULL, WNOHANG) > 0);}int main(int argc, char *argv[]){    // CLIENT vars    int clientfd, numbytes;    char buf[MAXDATASIZE];    int len;    struct hostent *he;    struct sockaddr_in their_addr;     char str[256];    (char*)malloc(100);    // SERVER vars    int sockfd, new_fd;    struct sockaddr_in my_addr_server;    struct sockaddr_in their_addr_server;    socklen_t sin_size;    struct sigaction sa;    int yes=1;    if (argc != 2) {        fprintf(stderr,"usage: client hostname\n");        exit(1);    }    if ((he=gethostbyname(argv[1])) == NULL) {        herror("gethostbyname");        exit(1);    }    if ((clientfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {        perror("socket");        exit(1);    }    if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {        perror("socket");        exit(1);    }    if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) {        perror("setsockopt");        exit(1);    }        // SERVER    my_addr_server.sin_family = AF_INET;    my_addr_server.sin_port = htons(MYPORT);    my_addr_server.sin_addr.s_addr = INADDR_ANY;    memset(&(my_addr_server.sin_zero), '\0', 8);     if (bind(sockfd, (struct sockaddr *)&my_addr_server, sizeof(struct sockaddr))                                                                   == -1) {        perror("bind");        exit(1);    }    // CLIENT    their_addr.sin_family = AF_INET;     their_addr.sin_port = htons(PORT);     their_addr.sin_addr = *((struct in_addr *)he->h_addr);    memset(&(their_addr.sin_zero), '\0', 8);    if (connect(clientfd, (struct sockaddr *)&their_addr,        sizeof(struct sockaddr)) == -1) {        perror("connect");        exit(1);    }    // SERVER listen    if (listen(sockfd, BACKLOG) == -1) {        perror("listen");        exit(1);    }    sa.sa_handler = sigchld_handler;    sigemptyset(&sa.sa_mask);    sa.sa_flags = SA_RESTART;    if (sigaction(SIGCHLD, &sa, NULL) == -1) {        perror("sigaction");        exit(1);    }while (1) {       // CLIENT       if ((numbytes=recv(clientfd, buf, MAXDATASIZE-1, 0)) == -1) {           perror("recv");           exit(1);       }       buf[numbytes] = '\0';       printf("%s\n", buf);       strcat(buf, "%s\n");       len = strlen(buf);}while (1) {printf("1\n");        sin_size = sizeof(struct sockaddr_in);        // SERVER - FUXED        if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr_server, &sin_size)) == -1) {            perror("accept");            continue;        }        //printf("server: got connection from %s\n", inet_ntoa(their_addr_server.sin_addr));        // SERVER	if (send(new_fd, buf, len, 0) == -1)                perror("send");        //close(new_fd);    }    return 0;}