I wanted to exclude certain clients from connecting to a QTcpServer. In my server, I use the following code:

Qt Code:
  1. void Server::incomingConnection(int socketDescriptor)
  2. {
  3. socket_ = new QTcpSocket(this);
  4.  
  5. //Only perform a host look-up, do NOT establish a connection
  6. if (!socket_->setSocketDescriptor(socketDescriptor, QAbstractSocket::HostLookupState))
  7. {
  8. emit error(socket_->error());
  9. return;
  10. }
  11.  
  12. QString name = socket_->peerName();
  13.  
  14. if (socket_->peerName() == QString("A certain hostname"))
  15. {
  16. emit finished();
  17. socket_->close();
  18. return;
  19. }
  20.  
  21. //Close socket anyway to be able to establish a connection
  22. socket_->close();
  23.  
  24. if (!socket_->setSocketDescriptor(socketDescriptor))
  25. {
  26. emit error(socket_->error());
  27. return;
  28. }
  29. }
To copy to clipboard, switch view to plain text mode 

On the client side:

Qt Code:
  1. void Client::establishConnection()
  2. {
  3. foreach(QString server, servers_)
  4. {
  5. socket_->connectToHost(server, port_);
  6.  
  7. if (socket_->waitForConnected(100))
  8. {
  9. connect(socket_, SIGNAL(readyRead()), this, SLOT(readyRead()));
  10.  
  11. emit connectionEstablished(server);
  12.  
  13. break;
  14. }
  15. }
To copy to clipboard, switch view to plain text mode 

Now it seems that waitForConnected returns true when only performing the host look-up. I do not want a connection to be established at the client side, if there is no real connection. This does not seem to be the behavior one would expect.

I can off course check of the socket is open afterwards, but shouldn't waitForConnected() only return true when a complete connection has been established?