TcpSocket类之析构与Open

2013年7月2日 由 Creater 留言 »

1.TcpSocket类通过SOCKETS_DYNAMIC_TEMP来决定是使用预先定义一个临时缓冲区m_buf,还是在每次接收时都动态new。当然动态new效率较低。
2.析构函数,首先决定是否释放m_buf,再将输出链表清空,因为list中存放的是动态new的地址,所以需要在析构函数中进行释放。

TcpSocket::~TcpSocket()
{
#ifdef SOCKETS_DYNAMIC_TEMP
	delete[] m_buf;
#endif
	//清空m_obuf,因为list中存放指针,所以需要在析构函数中析构
	while (m_obuf.size())
	{
		output_l::iterator it = m_obuf.begin();
		OUTPUT *p = *it;
		delete p;
		m_obuf.erase(it);
	}
}

3.5个Open函数的重载,实际上前面几个Open都是对地址和端口进行封装后调用

bool TcpSocket::Open(SocketAddress& ad,SocketAddress& bind_ad,bool skip_socks)

每个函数需要的参数为:

bool TcpSocket::Open(ipaddr_t ip,port_t port,bool skip_socks)
需要Tcp客户端connect到的ip地址和端口,内部对ip和port组成一个SocketAddress

bool TcpSocket::Open(ipaddr_t ip,port_t port,bool skip_socks)
{
	Ipv4Address ad(ip, port);
	Ipv4Address local;
	return Open(ad, local, skip_socks);
}

bool TcpSocket::Open(SocketAddress& ad,bool skip_socks)
则会使用Ipv4Address bind_ad(“0.0.0.0”, 0);将本地进程的ip和端口决定权交给内核。

bool TcpSocket::Open(SocketAddress& ad,SocketAddress& bind_ad,bool skip_socks)
ad为connect到的服务器地址信息,bind_ad为本地进程需要绑定的地址信息,skip_socks暂不关注。

bool TcpSocket::Open(const std::string &host,port_t port)
则是以字符串形式描述的服务器IP地址。
QQ图片20130702082627

广告位

发表评论

你必须 登陆 方可发表评论.