• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    5年前 (2013-07-02)  Socket library |   16 条评论  18 
    文章评分 0 次,平均分 0.0

    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地址。
    TcpSocket类之析构与Open

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/1619.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享