⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mconnector.cpp

📁 跨平台C++基础库
💻 CPP
字号:

#include "MCRT/mconnector.h"

#ifndef WIN32
#   include <sys/types.h>
#   include <sys/socket.h>
#   include <netinet/in.h>
#   include <netdb.h>
#   include <unistd.h>
#   include <errno.h>
#endif //end WIN32

MConnector::MConnector()
:MSocketBase()
{
}

MConnector::~MConnector()
{
    MSocketBase::Close();
}

mInt32 MConnector::Open( const char* pPeerAddr, mUInt16 peerPort )
{
    mInt32  retVal  =   E_SUCCESS;

    //release resource if opened
    if ( MSocketBase::IsValidSocket() )
    {
        MSocketBase::Close();
    }

    for ( int iOnce = 0; iOnce < 1; ++ iOnce ) // convenient for releasing resources while failed
    {
        struct  sockaddr_in peer_addr;
        struct  hostent*    p_peer_host =   NULL;

        //get peer info
        p_peer_host =   ::gethostbyname( pPeerAddr );
        if ( p_peer_host == NULL )
        {
            retVal  =   E_SOCKET_PEER_INVALID;
            break;
        }

        //create a socket descriptor to peer
        ::memset( &peer_addr, 0, sizeof( peer_addr ) );
        ::memcpy( (char*)&peer_addr.sin_addr, p_peer_host->h_addr, p_peer_host->h_length );
        peer_addr.sin_family    =   p_peer_host->h_addrtype;
        peer_addr.sin_port      =   ::htons( peerPort );
        this->m_socket  =   ::socket( peer_addr.sin_family, SOCK_STREAM, 0 );
        if ( ! MSocketBase::IsValidSocket() )
        {
            retVal  =   E_SOCKET_INSUFFICIENT_DESCRIPTOR;
            break;
        }

        //connect to peer
        if ( ::connect( this->m_socket, (struct sockaddr *)&peer_addr, sizeof(peer_addr) ) != 0 )
        {
            retVal  =   E_SOCKET_CONNECT;
            break;
        }

        //set timeout of send and recv
        MSocketBase::SetTimeoutSend( M_TIMEOUT_SEND_RECV );
        MSocketBase::SetTimeoutRecv( M_TIMEOUT_SEND_RECV );
    }

    if ( retVal != E_SUCCESS )
    {
        MSocketBase::Close();
    }
    return retVal;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -