void CSocket::Connect(const CSocketAddress& addr) { int ret=::connect(m_s,&addr.getImp(),addr.getImpSize()); if(ret<0)throw connect_failed(L"connect failed"); current_address=addr; }
void bev_connect_cb(struct bufferevent* bev, short events, void* arg) { jsonrpc_server_t* server = (jsonrpc_server_t*)arg; if(!arg) { ERR("Trying to connect null server\n"); return; } if (events & (BEV_EVENT_ERROR|BEV_EVENT_EOF)) { WARN("Connection error for %.*s:%d\n", STR(server->addr), server->port); if (events & BEV_EVENT_ERROR) { int err = bufferevent_socket_get_dns_error(bev); if(err) { ERR("DNS error for %.*s: %s\n", STR(server->addr), evutil_gai_strerror(err)); } } goto failed; } else if(events & BEV_EVENT_CONNECTED) { if (server->status == JSONRPC_SERVER_CONNECTED) { return; } server->status = JSONRPC_SERVER_CONNECTED; INFO("Connected to host %.*s:%d\n", STR(server->addr), server->port); } return; failed: connect_failed(server); }
void bev_connect(jsonrpc_server_t* server) { if(!server) { ERR("Trying to connect null server\n"); return; } INFO("Connecting to server %.*s:%d for conn %.*s.\n", STR(server->addr), server->port, STR(server->conn)); server->bev = bufferevent_socket_new( global_ev_base, -1, BEV_OPT_CLOSE_ON_FREE); if(!(server->bev)) { ERR("Could not create bufferevent for %.*s:%d\n", STR(server->addr), server->port); connect_failed(server); return; } bufferevent_setcb( server->bev, bev_read_cb, NULL, bev_connect_cb, server); bufferevent_enable(server->bev, EV_READ|EV_WRITE); if(bufferevent_socket_connect_hostname( server->bev, global_evdns_base, AF_UNSPEC, server->addr.s, server->port)<0) { WARN("Failed to connect to %.*s:%d\n", STR(server->addr), server->port); connect_failed(server); } }