tcp_session.cpp
来自「网络泡泡被.net管理」· C++ 代码 · 共 119 行
CPP
119 行
// TCP_Session.cpp: implementation of the TCP_Session class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "TCP.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
TCP_Session::TCP_Session(uint32 uid, TCP_Socket* ptr_tcp_socket)
: NET_Session(uid)
{
m_socket = INVALID_SOCKET;
m_ptr_net_socket = ptr_tcp_socket;
m_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (m_socket < 0)
{
Sys_Log("net_lib_log", "create tcp socket failed." );
}
INIT_CS(&m_lock_send_packet);
}
TCP_Session::~TCP_Session()
{
m_thread_pool.Cleanup();
CLOSESOCKET(m_socket);
m_socket = INVALID_SOCKET;
DELETE_CS(&m_lock_send_packet);
}
bool TCP_Session::PushSendPacket(NET_Packet* ptr_packet)
{
ptr_packet->setSID(m_uid);
ptr_packet->setUID(m_uid_opposite);
LOCK_CS(&m_lock_send_packet);
m_lst_send_packet.push_back(ptr_packet);
UNLOCK_CS(&m_lock_send_packet);
return true;
}
NET_Packet* TCP_Session::PopSendPacket()
{
NET_Packet* pRet;
LOCK_CS(&m_lock_send_packet);
if(m_lst_send_packet.begin()!=m_lst_send_packet.end())
{
pRet = *m_lst_send_packet.begin();
m_lst_send_packet.pop_front();
}
else
pRet = NULL;
UNLOCK_CS(&m_lock_send_packet);
return pRet;
}
int TCP_Session::recv(NET_Packet* pPacket)
{
return pPacket->recv(m_socket);
}
int TCP_Session::send(NET_Packet* pPacket, bool bIC)
{
if(pPacket==NULL)
return 0;
if(bIC)
{
this->mark_index(pPacket);
return pPacket->send_to(this);
}
else
{
int ret = pPacket->send_to(this);
if(pPacket->getIC()==IC_NULL)
{
delete(pPacket);
}
return ret;
}
}
bool TCP_Session::RunTransfersThread()
{
if(false==m_thread_pool.RunThread("recv_thread", thread_TCP_recv, this))
return false;
if(false==m_thread_pool.RunThread("send_thread", thread_TCP_send, this))
return false;
if(false==m_thread_pool.RunThread("check_connect_thread", thread_check_connect, this))
return false;
return true;
}
void TCP_Session::Connect()
{
if(connect(m_socket,(SOCKADDR *)get_sockaddr_in(),sizeof(m_addr_in))
==SOCKET_ERROR)
{
int err = GETERROR;
if (err != CONN_INPRROGRESS)
{
Sys_Log("net_lib_log", "socket connect error = %d",err);
return;
}
else
{
return;
}
}
RunTransfersThread();
NET_Session::Connect();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?