/* Find a available port on a hub; otherwise create one new port  */
NetClientState* net_hub_port_find(int hub_id)
/* Find a available port on a hub; otherwise create one new port  */
NetClientState* net_hub_port_find(int hub_id)
{
    NetHub *hub;
    NetHubPort *port;
    NetClientState *nc;
    QLIST_FOREACH(hub, &hubs, next) {
        if (hub->id == hub_id) {
            QLIST_FOREACH(port, &hub->ports, next) {
                nc = port->nc.peer;
                if (!nc) {
                    return &(port->nc);
                }
            }
            break;
        }
    }
    nc = net_hub_add_port(hub_id, NULL);
    return nc;
}