a9111b6015
Until now, vconn_connect() has always completed the connection synchronously, blocking as necessary. In the userspace switch, we want to be able to continue forwarding packets even if the connection to the controller drops. Thus, this change set that makes that possible. The approach taken is perhaps more ambitious than needed, as it actually adds a new high-level mechanism for polling on arbitrary file descriptors. This necessitates quite a bit of change to each of the userspace programs that use vconns, but it also has the effect of simplifying them. The new structure of these programs is a lot less fragile than the old one (which tended to end up livelocking or hanging when something wasn't quite right), so it seems like the changes are worth it.