📄 mconnector.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 + -