/*! Looks up the IP address(es) associated with host name \a name, and returns an ID for the lookup. When the result of the lookup is ready, the slot or signal \a member in \a receiver is called with a QHostInfo argument. The QHostInfo object can then be inspected to get the results of the lookup. The lookup is performed by a single function call, for example: \snippet doc/src/snippets/code/src_network_kernel_qhostinfo.cpp 2 The implementation of the slot prints basic information about the addresses returned by the lookup, or reports an error if it failed: \snippet doc/src/snippets/code/src_network_kernel_qhostinfo.cpp 3 If you pass a literal IP address to \a name instead of a host name, QHostInfo will search for the domain name for the IP (i.e., QHostInfo will perform a \e reverse lookup). On success, the resulting QHostInfo will contain both the resolved domain name and IP addresses for the host name. Example: \snippet doc/src/snippets/code/src_network_kernel_qhostinfo.cpp 4 \sa abortHostLookup(), addresses(), error(), fromName() */ int QHostInfo::lookupHost(const QString &name, QObject *receiver, const char *member) { #if defined QHOSTINFO_DEBUG qDebug("QHostInfo::lookupHost(\"%s\", %p, %s)", name.toLatin1().constData(), receiver, member ? member + 1 : 0); #endif if (!QAbstractEventDispatcher::instance(QThread::currentThread())) { qWarning("QHostInfo::lookupHost() called with no event dispatcher"); return -1; } qRegisterMetaType<QHostInfo>("QHostInfo"); #if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) QWindowsSockInit bust; // makes sure WSAStartup was callled #endif QScopedPointer<QHostInfoResult> result(new QHostInfoResult); result.data()->autoDelete = false; QObject::connect(result.data(), SIGNAL(resultsReady(QHostInfo)), receiver, member); int id = result.data()->lookupId = theIdCounter.fetchAndAddRelaxed(1); if (name.isEmpty()) { QHostInfo info(id); info.setError(QHostInfo::HostNotFound); info.setErrorString(QObject::tr("No host name given")); QMetaObject::invokeMethod(result.data(), "emitResultsReady", Qt::QueuedConnection, Q_ARG(QHostInfo, info)); result.take()->autoDelete = true; return id; } QHostInfoAgent *agent = theAgent(); agent->addHostName(name, result.take()); #if !defined QT_NO_THREAD if (!agent->isRunning()) agent->start(); #else // if (!agent->isRunning()) agent->run(); // else // agent->wakeOne(); #endif return id; }
/*! Looks up the IP address(es) associated with host name \a name, and returns an ID for the lookup. When the result of the lookup is ready, the slot or signal \a member in \a receiver is called with a QHostInfo argument. The QHostInfo object can then be inspected to get the results of the lookup. The lookup is performed by a single function call, for example: \snippet doc/src/snippets/code/src.network.kernel.qhostinfo.cpp 2 The implementation of the slot prints basic information about the addresses returned by the lookup, or reports an error if it failed: \snippet doc/src/snippets/code/src.network.kernel.qhostinfo.cpp 3 If you pass a literal IP address to \a name instead of a host name, QHostInfo will search for the domain name for the IP (i.e., QHostInfo will perform a \e reverse lookup). On success, the resulting QHostInfo will contain both the resolved domain name and IP addresses for the host name. Example: \snippet doc/src/snippets/code/src.network.kernel.qhostinfo.cpp 4 \sa abortHostLookup(), addresses(), error(), fromName() */ int QHostInfo::lookupHost(const QString &name, QObject *receiver, const char *member) { #if defined QHOSTINFO_DEBUG qDebug("QHostInfo::lookupHost(\"%s\", %p, %s)", name.toLatin1().constData(), receiver, member ? member + 1 : 0); #endif if (!QAbstractEventDispatcher::instance(QThread::currentThread())) { qWarning("QHostInfo::lookupHost() called with no event dispatcher"); return -1; } qRegisterMetaType<QHostInfo>("QHostInfo"); #if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) QWindowsSockInit bust; // makes sure WSAStartup was callled #endif // Support for IDNA by first splitting the name into labels, then // running the punycode decoder on each part, then merging // together before passing the name to the lookup agent. QString lookup = QString::fromLatin1(QUrl::toAce(name)); QHostInfoAgent *agent = theAgent(); QHostInfoResult *result = new QHostInfoResult; QObject::connect(result, SIGNAL(resultsReady(QHostInfo)), receiver, member); int id = result->lookupId = theIdCounter.fetchAndAddRelaxed(1); agent->addHostName(lookup, result); #if !defined QT_NO_THREAD if (!agent->isRunning()) agent->start(); #else // if (!agent->isRunning()) agent->run(); // else // agent->wakeOne(); #endif return id; }