summaryrefslogtreecommitdiff
path: root/server/server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/server.cpp')
-rw-r--r--server/server.cpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/server/server.cpp b/server/server.cpp
index 805239c..2c46489 100644
--- a/server/server.cpp
+++ b/server/server.cpp
@@ -1,8 +1,10 @@
#include "server.hpp"
int server::c_server::init( ) {
- if( WSAStartup( MAKEWORD( 2, 2 ), &m_sock_data ) )// windows
+#if WIN32
+ if( WSAStartup( MAKEWORD( 2, 2 ), &m_sock_data ) ) // windows
return 1;
+#endif
m_socket = socket( AF_INET, SOCK_STREAM, 0 );
if( m_socket == INVALID_SOCKET )
@@ -21,21 +23,31 @@ void server::c_server::listen( ) {
::listen( m_socket, 5 );
sockaddr_in client_address{ };
- client_address.sin_port = htons( PORT_NUM );
+
+ // not needed, this is set in accept, values are input.
+ // 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;
+ 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 ) );
+
+ // connection established.
+ std::lock_guard lock( m_mutex );
+ auto client = std::make_shared< c_client >( result, client_address.sin_addr );
+
+ client->send_message( "hello" );
+
+ m_clients.push_back( client );
}
void server::c_server::client_loop( ) {
if( m_clients.size( ) ) {
+ std::lock_guard lock( m_mutex );
for( auto it = m_clients.begin( ); it != m_clients.end( ); ++it ) {
if( !( *it )->handle( ) ) {
printf( "%s disconnected\n", ( *it )->get_ip( ) );