All pastes #565182 Raw Edit

Mine

public c v1 · immutable
·published 2007-06-13 22:16 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <string.h>ssize_treadline(int fd, void *vptr, size_t max){   ssize_t n, rc;   char    c, *ptr;   ptr = vptr;   for (n = 1; n < max; n++) {       if ( (rc = read(fd, &c, 1)) == 1) {           *ptr++ = c;           if (c == 13) {               break;                    }       } else if (rc == 0) {           *ptr = 0;           return (n - 1);            }   }   *ptr = 0;                     return (n);}void ClientHandlerTCP(int clientSocket) {       char username[256];       char msg[100];       int unl = readline(clientSocket, username, 256);       printf("A: asked for %s\n", username);       sprintf(msg, "YES");       int sl = strlen(msg);       if (sl == (write(clientSocket, msg, sl)))               printf("A: User logged in sent\n");       else               printf("A: something went wrong");}void ClientHandlerUDP(int clientSocket) {       char msg[100];       sprintf(msg, "%d", 10);       int sl = strlen(msg);       if (sl == (write(clientSocket, msg, sl)))               printf("B: Number of users sent\n");       else               printf("B: something went wrong");}void handleSocketTCP(int clientSocketTCP) {       struct sockaddr_in newClient;       int clientLength, newSocket, clientSocket;       pid_t childpid;       printf("TCP - listen\n");       listen(clientSocketTCP,5);       for(;;)       {               clientLength = sizeof(newClient);               printf("TCP - accept\n");               newSocket = accept(clientSocketTCP,(struct sockaddr *) &newClient,&clientLength);               printf("TCP - accepted\n");                              if ((childpid=fork())==0)               {                       printf("TCP - fork\n");                       close(clientSocket);                       printf("TCP - handler started\n");                       ClientHandlerTCP(newSocket);                       printf("TCP - handler finished\n");                       exit(0);                       continue;               }               else                       close(newSocket);       }       printf("TCP server socket finished\n");}void handleSocketUDP(int clientSocketUDP) {       struct sockaddr_in newClient;       int newSocket, clientSocket;	   int monitorLen;	   char buffer[20];       pid_t childpid;       for(;;)       {			struct sockaddr_in newMonitor;			monitorLen = sizeof(newMonitor);			int length = recvfrom(clientSocket, buffer, 10, 0, (struct sockaddr*) &newMonitor,&monitorLen);								            if ((childpid=fork())==0)            {                printf("Client B handler forked\n");				close(clientSocket);				printf("Client B handler running...\n");				ClientHandlerUDP(newSocket);				printf("Client B handler done.\n");				exit(0);				continue;            }            else                 close(newSocket);       }       printf("Server socket B handler done\n");}int main(int argc, char **argv){       int clientSocketTCP, clientSocketUDP;       struct sockaddr_in clisinTCP,clisinUDP,monsin,newClient,newmon;       int monport,port;       fd_set fdvar;       pid_t serverTCP, serverUDP;       port = 7009;       if ((clientSocketTCP = socket(AF_INET,SOCK_STREAM,0)) <0){               perror("sv : client socket error\n");               exit(1);       }       memset(&clisinTCP,0,sizeof(clisinTCP));       clisinTCP.sin_family = AF_INET;       clisinTCP.sin_addr.s_addr = htonl(INADDR_ANY);       clisinTCP.sin_port = htons(port);       if (bind(clientSocketTCP,(struct sockaddr*)&clisinA,sizeof(clisinTCP))<0 ){               perror("sv : client socket bind error \n");               exit(3);       }       if ((serverTCP = fork())==0) {               printf("serverA forked\n");               handleSocketTCP(clientSocketTCP);               printf("serverA done its job\n");       }       port = 8099;       if ((clientSocketUDP = socket(AF_INET,SOCK_DGRAM,0)) <0){               perror("B : client socket error\n");               exit(1);       }       memset(&clisinUDP,0,sizeof(clisinUDP));       clisinUDP.sin_family = AF_INET;       clisinUDP.sin_addr.s_addr = htonl(INADDR_ANY);       clisinUDP.sin_port = htons(port);       if (bind(clientSocketUDP,(struct sockaddr*)&clisinUDP,sizeof(clisinUDP))<0 ){               perror("B : client socket bind error \n");               exit(3);       }       if ((serverUDP = fork())==0) {               printf("serverUDP forked\n");               handleSocketUDP(clientSocketUDP);               printf("serverUDP done its job\n");       }       int i = 2;       int status = 0;       while (i > 0) {               wait(&status);               i--;       }       return 0;}