Thanks Krishnan
I eventually worked out the problem. I'm running the Selenium Driver, Hub and Node on the same machine for testing.
When the node starts, it connects to the hub using 'localhost' which works fine. When the driver starts, it also connects to the hub using 'localhost', again fine. Now when the hub tries to connect to the node, it uses the ip address supplied by the node in the initial handshake, and not using 'localhost'.
The system was setup to go via the proxy for ip addresses but not for localhost, and the hub didn't have a session/credentials to use the proxy. End result was that the hub was hanging trying to connect to the node. Unfortunately, there doesn't seem to be a timeout or any error messages written to the console.
Thanks