From: Etienne Dechamps Date: Fri, 27 Jun 2014 18:33:31 +0000 (+0100) Subject: Protect against spurious connection events. X-Git-Tag: release-1.1pre11~96 X-Git-Url: https://tinc-vpn.org/git/browse?a=commitdiff_plain;h=86a99c6b999671ed444711139db1937617e802a0;hp=86a99c6b999671ed444711139db1937617e802a0;p=tinc Protect against spurious connection events. The event loop does not guarantee that spurious write I/O events do not happen; in fact, they are guaranteed to happen on Windows when event_flush_output() is called. Because handle_meta_io() does not check for spurious events, a metaconnection socket might appear connected even though it's not, and will fail immediately when sending the ID request. This commit fixes this issue by making handle_meta_io() check the connection status before assuming the socket is connected. It seems that the only reliable way to do that is to try to call connect() again and look at the error code, which will be EISCONN if the socket is connected, or EALREADY if it's not. ---