/*************************************************************************** * _ _ * * /_\ /_\ * * \_/ ------------------- \_/ * * /_\ Network Stack /_\ * * |_| ------------------- |_| * * /___\ /___\ * * * ***************************************************************************/ #include #include #include #include "network.h" using namespace std; //----------------------------------------------------------------------------- /* Constructor */ Network::Network() : network(0) {} //----------------------------------------------------------------------------- /* ::create() TCP */ void Network::socket() { network = ::socket(AF_INET, SOCK_STREAM, 0); if (network < 0) { cout << "Error by ::create() Socket"; exit(1); } } //----------------------------------------------------------------------------- /* ::bind() */ void Network::bind(const int port) { struct sockaddr_in server; server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons ( port ); int bind_return = ::bind(network,(struct sockaddr *)&server,sizeof(server)); if(bind_return == -1) { cout << "Error by ::bind() Socket"; exit(1); } } //----------------------------------------------------------------------------- /* ::listen() */ void Network::listen() const { const int CON = 15; int listen_return = ::listen(network, CON); if(listen_return == -1) { cout << "Error by ::listen() Socket"; exit(1); } } //----------------------------------------------------------------------------- /* ::connect() */ void Network::connect(char *serv_addr, const int 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(network,(sockaddr *)&server, sizeof(server)) < 0 ) { cout << "Error by ::connect() Socket"; exit(1); } } //----------------------------------------------------------------------------- /* ::accept() */ void Network::accept(Network& new_socket) const { struct sockaddr_in client; int addr_length = sizeof(client); new_socket.network = ::accept(network,(sockaddr *)&client,(socklen_t *)&addr_length); if( new_socket.network <= 0) { cout << "Error by ::accept() Socket"; exit(1); } } //----------------------------------------------------------------------------- /* ::send() TCP */ void Network::send(char *data, size_t size) const { if(::send(network, data, size, 0) == -1) { cout << "Error in Socket ::send()"; exit(1); } } //----------------------------------------------------------------------------- /* ::recive() TCP */ void Network::recv(char *data, size_t size) const { int move = ::recv(network, data, size, 0); if( move > 0 || move != -1 ) { data[move] = '\0'; } else { cout << "Error in Socket ::recv()"; exit(1); } } //----------------------------------------------------------------------------- /* ::close() */ void Network::close() const { ::close(network); } //-----------------------------------------------------------------------------