boost socket 最直接有效地设定ip和port的代码……

  哎,第一,我想说官网的教程尚需完善

第二:是我自己基础不好,所以费了点劲

 

就是这样:

tcp::endpoint end_p(boost::asio::ip::address_v4::from_string("127.0.0.1"), target_port);
        tcp::endpoint end_point(boost::asio::ip::address_v4::from_string("127.0.0.1"), 974);
        client_proxy_socket.open(end_point.protocol());
        client_proxy_socket.bind(end_point);
        client_proxy_socket.connect(end_p);
        boost::asio::write(client_proxy_socket, req.header_to_buffers());

 

然后今天解决了一个之前没在大量client加压下发现不了的问题,比如server A 和 B, 如果他们只是单纯地通过绑定一个(举例)端口来进行通讯,是会出问题的,比如A的端口是888,B的是999,正常情况下没问题,但如果在A端发起来一个向B的请求,用的就是888对999的端口,这个链接的通讯和数据交换还没有完成的时候,B端又因为因其他事情向A端发起来一个由999到88的请求,这样是会堵塞住的,哪个进程都不能进行下去

而现在的办法就是, 发送的时候,生成一个伪随机的port,用这个port来发送,接收端还是原本的888或999,反之亦然,这样的话就不会有那种阻塞了

然后还有一样事情,就是当server搞出了很多歌connection,而这些connection又都在使用或有部分connection在使用ec socket的时候,这些端口在connection之间是共享不了的,尽管在每个socket的option里面都设置了reuse address 为true,但这个条件只能对某一个connection的其他ec socket起作用,所以我要加一个全局的静态变量,再加个mutex,来每次让一个connection为单位为自己的ec socket获取一个port,然后这个connection的工作完成之后,ec socket都释放和close之后,这些端口就还又能用了,现在暂时只设定了36个,不知道够不够

posted @ 2014-05-19 17:09  Allen_Tung  阅读(2466)  评论(0编辑  收藏  举报