echoserver.pdf

2
1: /* 2: 3: ECHOSERV.C 4: ========== 5: (c) Paul Griffiths, 1999 6: Email: [email protected] 7: 8: Simple TCP/IP echo server. 9: 10: */ 11: 12: 13: #include <sys/socket.h> /* socket definitions */ 14: #include <sys/types.h> /* socket types */ 15: #include <arpa/inet.h> /* inet (3) funtions */ 16: #include <unistd.h> /* misc. UNIX functions */ 17: 18: #include "helper.h" /* our own helper functions */ 19: 20: #include <stdlib.h> 21: #include <stdio.h> 22: 23: 24: /* Global constants */ 25: 26: #define ECHO_PORT (2002) 27: #define MAX_LINE (1000) 28: 29: 30: int main ( int argc , char * argv [ ] ) { 31: int list_s ; /* listening socket */ 32: int conn_s ; /* connection socket */ 33: short int port ; /* port number */ 34: struct sockaddr_in servaddr ; /* socket address structure */ 35: char buffer [ MAX_LINE ] ; /* character buffer */ 36: char * endptr ; /* for strtol() */ 37: 38: 39: /* Get port number from the command line, and 40: set to default port if no arguments were supplied */ 41: 42: if ( argc == 2 ) { 43: port = strtol ( argv [ 1 ] , & endptr , 0 ) ; 44: if ( * endptr ) { 45: fprintf ( stderr , "ECHOSERV: Invalid port number.\n" ) ; 46: exit ( EXIT_FAILURE ) ; 47: } 48: } 49: else if ( argc < 2 ) { 50: port = ECHO_PORT ; 51: } 52: else { 53: fprintf ( stderr , "ECHOSERV: Invalid arguments.\n" ) ; 54: exit ( EXIT_FAILURE ) ; 55: } 56: 57: 58: /* Create the listening socket */ 59: 60: if ( ( list_s = socket ( AF_INET , SOCK_STREAM , 0 ) ) < 0 ) { 61: fprintf ( stderr , "ECHOSERV: Error creating listening socket.\n" ) ; 62: exit ( EXIT_FAILURE ) ;

Upload: nihal-jain

Post on 18-Jan-2016

18 views

Category:

Documents


0 download

DESCRIPTION

echo server socket

TRANSCRIPT

Page 1: echoServer.pdf

1: /*2: 3: ECHOSERV.C4: ==========5: (c) Paul Griffiths, 19996: Email: [email protected]: 8: Simple TCP/IP echo server.9:

10: */11: 12: 13: #include <sys/socket.h> /* socket definitions */14: #include <sys/types.h> /* socket types */15: #include <arpa/inet.h> /* inet (3) funtions */16: #include <unistd.h> /* misc. UNIX functions */17: 18: #include "helper.h" /* our own helper functions */19: 20: #include <stdlib.h>21: #include <stdio.h>22: 23: 24: /* Global constants */25: 26: #define ECHO_PORT (2002)27: #define MAX_LINE (1000)28: 29: 30: int main(int argc, char *argv[]) {31: int list_s; /* listening socket */32: int conn_s; /* connection socket */33: short int port; /* port number */34: struct sockaddr_in servaddr; /* socket address structure */35: char buffer[MAX_LINE]; /* character buffer */36: char *endptr; /* for strtol() */37: 38: 39: /* Get port number from the command line, and40: set to default port if no arguments were supplied */41: 42: if ( argc == 2 ) {43: port = strtol(argv[1], &endptr, 0);44: if ( *endptr ) {45: fprintf(stderr, "ECHOSERV: Invalid port number.\n");46: exit(EXIT_FAILURE);47: }48: }49: else if ( argc < 2 ) {50: port = ECHO_PORT;51: }52: else {53: fprintf(stderr, "ECHOSERV: Invalid arguments.\n");54: exit(EXIT_FAILURE);55: }56: 57: 58: /* Create the listening socket */59: 60: if ( (list_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {61: fprintf(stderr, "ECHOSERV: Error creating listening socket.\n");62: exit(EXIT_FAILURE);

Page 2: echoServer.pdf

63: }64: 65: 66: /* Set all bytes in socket address structure to67: zero, and fill in the relevant data members */68: 69: memset(&servaddr, 0, sizeof(servaddr));70: servaddr.sin_family = AF_INET;71: servaddr.sin_addr.s_addr = htonl(INADDR_ANY);72: servaddr.sin_port = htons(port);73: 74: 75: /* Bind our socket addresss to the 76: listening socket, and call listen() */77: 78: if ( bind(list_s, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0 ) {79: fprintf(stderr, "ECHOSERV: Error calling bind()\n");80: exit(EXIT_FAILURE);81: }82: 83: if ( listen(list_s, LISTENQ) < 0 ) {84: fprintf(stderr, "ECHOSERV: Error calling listen()\n");85: exit(EXIT_FAILURE);86: }87: 88: 89: /* Enter an infinite loop to respond90: to client requests and echo input */91: 92: while ( 1 ) {93: 94: /* Wait for a connection, then accept() it */95: 96: if ( (conn_s = accept(list_s, NULL, NULL) ) < 0 ) {97: fprintf(stderr, "ECHOSERV: Error calling accept()\n");98: exit(EXIT_FAILURE);99: }

100: 101: 102: /* Retrieve an input line from the connected socket103: then simply write it back to the same socket. */104: 105: Readline(conn_s, buffer, MAX_LINE-1);106: Writeline(conn_s, buffer, strlen(buffer));107: 108: 109: /* Close the connected socket */110: 111: if ( close(conn_s) < 0 ) {112: fprintf(stderr, "ECHOSERV: Error calling close()\n");113: exit(EXIT_FAILURE);114: }115: }116: }117: