MCPcopy Create free account
hub / github.com/Panzerschrek/Chasm-Reverse / ConnectToServer

Method ConnectToServer

PanzerChasm/net/net.cpp:638–812  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

636}
637
638IConnectionPtr Net::ConnectToServer(
639 const InetAddress& address,
640 const uint16_t in_udp_port,
641 const uint16_t in_tcp_port )
642{
643#ifdef _WIN32
644 // Create and open TCP socket.
645 const SOCKET tcp_socket= ::socket( AF_INET, SOCK_STREAM, 0 );
646 if( tcp_socket == INVALID_SOCKET )
647 {
648 Log::Warning( FUNC_NAME, " can not create tcp socket. Error code: ", ::WSAGetLastError() );
649 return nullptr;
650 }
651
652 sockaddr_in tcp_address;
653 tcp_address.sin_family= AF_INET;
654 tcp_address.sin_addr.s_addr= INADDR_ANY;
655 tcp_address.sin_port= ::htons( in_tcp_port );
656 if( ::bind( tcp_socket, (sockaddr*) &tcp_address, sizeof(tcp_address) ) != 0 )
657 {
658 Log::Warning( FUNC_NAME, " can not bind tcp socket. Error code: ", ::WSAGetLastError() );
659 ::closesocket( tcp_socket );
660 return nullptr;
661 }
662
663 // Createe and open UDP socket.
664 const SOCKET udp_socket= ::socket( AF_INET, SOCK_DGRAM, 0 );
665 if( udp_socket == INVALID_SOCKET )
666 {
667 Log::Warning( FUNC_NAME, " can not create udp socket. Error code: ", ::WSAGetLastError() );
668 ::closesocket( tcp_socket );
669 return nullptr;
670 }
671
672 sockaddr_in udp_address;
673 udp_address.sin_family= AF_INET;
674 udp_address.sin_addr.s_addr= INADDR_ANY;
675 udp_address.sin_port= ::htons( in_udp_port );
676 if( ::bind( udp_socket, (sockaddr*) &udp_address, sizeof(udp_address) ) != 0 )
677 {
678 Log::Warning( FUNC_NAME, " can not bind udp socket. Error code: ", ::WSAGetLastError() );
679 ::closesocket( tcp_socket );
680 ::closesocket( udp_socket );
681 return nullptr;
682 }
683
684 // Connect to server.
685 sockaddr_in server_tcp_address;
686 std::memset( &server_tcp_address, 0, sizeof(server_tcp_address) );
687 server_tcp_address.sin_family= AF_INET;
688 server_tcp_address.sin_addr.s_addr= ::htonl( address.ip_address );
689 server_tcp_address.sin_port= ::htons( address.port );
690
691 const int connection_result= ::connect( tcp_socket, (sockaddr*) &server_tcp_address, sizeof(server_tcp_address) );
692 if( connection_result == SOCKET_ERROR )
693 {
694 Log::Warning( FUNC_NAME, " can not connect to server. Error code: ", ::WSAGetLastError() );
695 ::closesocket( tcp_socket );

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected