void asio_rpc_session::connect() { if (try_connecting()) { boost::asio::ip::tcp::endpoint ep( boost::asio::ip::address_v4(_remote_addr.ip()), _remote_addr.port()); add_ref(); _socket->async_connect(ep, [this](boost::system::error_code ec) { if (!ec) { dinfo("client session %s connected", _remote_addr.to_string() ); set_options(); set_connected(); on_send_completed(); do_read(); } else { derror("client session connect to %s failed, error = %s", _remote_addr.to_string(), ec.message().c_str() ); on_failure(); } release_ref(); }); } }
void hpc_rpc_session::connect() { if (!try_connecting()) return; dassert(_socket != -1, "invalid given socket handle"); struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(_remote_addr.ip()); addr.sin_port = htons(_remote_addr.port()); int rt = ::connect(_socket, (struct sockaddr*)&addr, (int)sizeof(addr)); int err = errno; dinfo("(s = %d) call connect to %s:%hu, return %d, err = %s", _socket, _remote_addr.name(), _remote_addr.port(), rt, strerror(err) ); if (rt == -1 && err != EINPROGRESS) { dwarn("(s = %d) connect failed, err = %s", _socket, strerror(err)); on_failure(); return; } // bind for connect _looper->bind_io_handle((dsn_handle_t)(intptr_t)_socket, &_ready_event, EVFILT_WRITE, this ); }
void hpc_rpc_session::connect() { if (!try_connecting()) return; _connect_event.callback = [this](int err, uint32_t io_size, uintptr_t lpolp) { //dinfo("ConnectEx completed, err = %d, size = %u", err, io_size); if (err != ERROR_SUCCESS) { dwarn("ConnectEx failed, err = %d", err); this->on_failure(); } else { dinfo("client session %s:%hu connected", _remote_addr.name(), _remote_addr.port() ); set_connected(); on_send_completed(nullptr); do_read(); } this->release_ref(); // added before ConnectEx }; memset(&_connect_event.olp, 0, sizeof(_connect_event.olp)); struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(_remote_addr.ip()); addr.sin_port = htons(_remote_addr.port()); this->add_ref(); // released in _connect_event.callback BOOL rt = s_lpfnConnectEx( _socket, (struct sockaddr*)&addr, (int)sizeof(addr), 0, 0, 0, &_connect_event.olp ); if (!rt && (WSAGetLastError() != ERROR_IO_PENDING)) { dwarn("ConnectEx failed, err = %d", ::WSAGetLastError()); this->release_ref(); on_failure(); } }
void sim_client_session::connect() { if (try_connecting()) set_connected(); }