SharedPointer<ConnInfo> BaseProxy::get_Conn(){ SharedPointer<ConnInfo> conn; if (_use_existing_socket) { conn = ConnectionManager::get_instance()->get_connection(_name); } else { SharedPointer<BinaryProtocol> prot; bool ok=false; while(_protocols.get(prot, 10)==0&&!ok){ //deal CLOSE_WAIT connect if(prot.is_valid()&&prot->getTransport().is_valid()){ if((ok=SocketTool::is_ok(prot->getTransport()->id()))){ conn=SharedPointer<ConnInfo>(new(std::nothrow)ConnInfo(prot)); break; } } } if(!ok){ conn=create_Conn(); } } if (conn.is_valid() && conn->proto.is_valid() && conn->proto->getTransport().is_valid()) { int32_t tm = 0; if (get_property(PROXY_SEND_TIMEOUT, tm)) { SocketTool::set_sndtimeout(conn->proto->getTransport()->id(), tm); } if (get_property(PROXY_RECV_TIMEOUT, tm)) { SocketTool::set_rcvtimeout(conn->proto->getTransport()->id(), tm); } } return conn; }
SharedPointer<ConnInfo> SSLBaseProxy::create_Conn(){ SharedPointer<bgcc::ClientSocket> client = SharedPointer<bgcc::SSLClientSocket>( new SSLClientSocket(_serverinfo.getIP(),_serverinfo.getPort())); if (client.is_valid()) { if(client->open()==0){ SharedPointer<BinaryProtocol> prot = SharedPointer<BinaryProtocol>(new bgcc::BinaryProtocol(client)); if(prot.is_valid()&& prot->getTransport().is_valid()){ int32_t tm=0; if(get_property(PROXY_SEND_TIMEOUT, tm)){ SocketTool::set_sndtimeout(prot->getTransport()->id(), tm); } if(get_property(PROXY_RECV_TIMEOUT, tm)){ SocketTool::set_rcvtimeout(prot->getTransport()->id(), tm); } } return SharedPointer<ConnInfo>(new ConnInfo(prot)); } } return SharedPointer<ConnInfo>(NULL); }