From 7ccb819f867493f8ec202ea3b39c94c198c64584 Mon Sep 17 00:00:00 2001 From: JustSomePwner Date: Thu, 30 Aug 2018 14:01:54 +0200 Subject: first --- server/server.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 server/server.cpp (limited to 'server/server.cpp') diff --git a/server/server.cpp b/server/server.cpp new file mode 100644 index 0000000..805239c --- /dev/null +++ b/server/server.cpp @@ -0,0 +1,47 @@ +#include "server.hpp" + +int server::c_server::init( ) { + if( WSAStartup( MAKEWORD( 2, 2 ), &m_sock_data ) )// windows + return 1; + + m_socket = socket( AF_INET, SOCK_STREAM, 0 ); + if( m_socket == INVALID_SOCKET ) + return 2; + + sockaddr_in server_address{ }; + server_address.sin_addr.s_addr = INADDR_ANY; + server_address.sin_port = htons( PORT_NUM ); + server_address.sin_family = AF_INET; + + auto result = ::bind( m_socket, ( sockaddr* )( &server_address ), sizeof( server_address ) ); + return result != -1 ? 0 : 3; +} + +void server::c_server::listen( ) { + ::listen( m_socket, 5 ); + + sockaddr_in client_address{ }; + client_address.sin_port = htons( PORT_NUM ); + int len = sizeof( client_address ); + + SOCKET result = accept( m_socket, ( sockaddr* )( &client_address ), &len ); + if( result == INVALID_SOCKET ) { + printf( "socket error accepting a connection\n" ); + return; + } + + printf( "incoming connection from: %s\n", inet_ntoa( client_address.sin_addr ) ); + m_clients.push_back( std::make_shared< c_client >( result, client_address.sin_addr ) ); +} + +void server::c_server::client_loop( ) { + if( m_clients.size( ) ) { + for( auto it = m_clients.begin( ); it != m_clients.end( ); ++it ) { + if( !( *it )->handle( ) ) { + printf( "%s disconnected\n", ( *it )->get_ip( ) ); + m_clients.erase( it ); + break; + } + } + } +} \ No newline at end of file -- cgit v1.2.3