void AsynchConnector::connComplete(DispatchHandle& h) { int errCode = socket.getError(); if (errCode == 0) { h.stopWatch(); try { socket.finishConnect(sa); } catch (const std::exception& e) { failCallback(socket, 0, e.what()); DispatchHandle::doDelete(); return; } connCallback(socket); } else { // Retry while we cause an immediate exception // (asynch failure will be handled by re-entering here at the top) while (sa.nextAddress()) { try { // Try next address without deleting ourselves QPID_LOG(debug, "Ignored socket connect error: " << strError(errCode)); QPID_LOG(info, "Retrying connect: " << sa.asString()); socket.connect(sa); return; } catch (const std::exception& e) { QPID_LOG(debug, "Ignored socket connect exception: " << e.what()); } errCode = socket.getError(); } h.stopWatch(); failCallback(socket, errCode, strError(errCode)); } DispatchHandle::doDelete(); }
/* * Close the socket and callback to say we've done it */ void AsynchIO::close(DispatchHandle& h) { h.stopWatch(); socket.close(); if (closedCallback) { closedCallback(*this, socket); } }
void SslConnector::connComplete(DispatchHandle& h) { int errCode = socket.getError(); h.stopWatch(); if (errCode == 0) { connCallback(socket); DispatchHandle::doDelete(); } else { // TODO: This need to be fixed as strerror isn't thread safe failure(errCode, std::string(::strerror(errCode))); } }