/*************************************************************************** * _ _ * * /_\ /_\ * * \_/ ------------------- \_/ * * /_\ Network Stack /_\ * * |_| ------------------- |_| * * /___\ /___\ * * * ***************************************************************************/ /* Header Files */ #include #include #include #include #include "network.h" /*---------------------------------------------------------------------------*/ /* exit() */ void error_exit(char *error_message) { fprintf(stderr, "%s: \n", error_message); exit(EXIT_FAILURE); } /*---------------------------------------------------------------------------*/ /* create() */ void net_create(int af, int type, int protocol) { socket_t tcpsock; tcpsock = socket(af, type, protocol); if(tcpsock < 0) { error_exit("Error by Create()"); } } /*---------------------------------------------------------------------------*/ /* bind() */ void net_bind(socket_t *tcpsock, unsigned long adress, const unsigned short port) { struct sockaddr_in server; memset( &server, 0, sizeof (server)); server.sin_family = AF_INET; /* IP-Adresse */ server.sin_addr.s_addr = htonl(adress); /* Every IP-Addresse */ server.sin_port = htons(port); /* Portnumber */ if(bind (*tcpsock,(struct sockaddr*)&server, sizeof(server)) < 0) { error_exit("Error by bind()"); } } /*---------------------------------------------------------------------------*/ /* listen() */ void net_listen(socket_t *tcpsock) { const int CON = 15; if(listen(*tcpsock, CON) == -1 ) { error_exit("Error by listen()"); } } /*---------------------------------------------------------------------------*/ /* connect() */ void net_connect(socket_t *tcpsock, char *serv_addr, unsigned short port) { struct sockaddr_in server; unsigned long addr; memset( &server, 0, sizeof (server)); if((addr = inet_addr( serv_addr )) != INADDR_NONE) { memcpy((char *)&server.sin_addr, &addr, sizeof(addr)); } server.sin_family = AF_INET; server.sin_port = htons(port); if(connect(*tcpsock,(struct sockaddr*)&server,sizeof(server)) < 0) { error_exit( "Connection to Server fail"); } } /*---------------------------------------------------------------------------*/ /* accept() */ void net_accept(socket_t *socket, socket_t *new_socket) { struct sockaddr_in client; int move = sizeof(client); *new_socket = accept(*socket,(struct sockaddr*)&client,(socklen_t*) &move); if(*new_socket == -1) { error_exit("Error by accept()"); } } /*---------------------------------------------------------------------------*/ /* send() TCP */ void net_send(socket_t *tcpsock, char *data, size_t size) { if(send(*tcpsock, data, size, 0) == -1) { error_exit("Error by send()"); } } /*---------------------------------------------------------------------------*/ /* recv() TCP */ void net_recv(socket_t *tcpsock, char *data, size_t size) { int move = recv(*tcpsock, data, size, 0); if( move > 0 || move != -1 ) { data[move] = '\0'; } else { error_exit("Error by recv()"); } } /*---------------------------------------------------------------------------*/ /* close() */ void net_close(socket_t *tcpsock) { close(*tcpsock); } /*---------------------------------------------------------------------------*/