On 30 Oct 2018, at 23:40, Jens Alfke <j...@mooseyard.com> wrote: > My knowledge of TCP tells me that if you write to a socket, but no ACK packet > is received within ~15 seconds, the socket will be closed with an error (I > think ECONNRESET?)
I can’t speak to how Xamarin works, but if it’s a simple wrapper around BSD Sockets then the expected behaviour here is that the kernel will maintain the TCP connection, retrying indefinitely. BSD Sockets was designed for a world where computers used wired connections that were manually configured, and thus the kernel does not automatically close a connection just because its source address has been lost. High-level APIs, like CFSocketStream, actively monitor the connection to see if the source address goes invalid. > I’m uncomfortable with this, since I know Reachability can be unreliable and > this usage doesn’t go along with the best practices It is, alas, a mistake to apply your high-level intuition to this low-level problem. In this case there’s a specific reachability API you should be using, namely `SCNetworkReachabilityCreateWithAddressPair`. Once the socket has connected you should get the local and peer address (`getsockname` and `getpeername`) and feed that into `SCNetworkReachabilityCreateWithAddressPair`. I recommend that you debounce this signal. That is, closing the connection only if reachability indicates a problem for a second or so. Without this debounce you can end up closing the connection in situations where it might have recovered. Share and Enjoy -- Quinn "The Eskimo!" <http://www.apple.com/developer/> Apple Developer Relations, Developer Technical Support, Core OS/Hardware _______________________________________________ Do not post admin requests to the list. They will be ignored. Macnetworkprog mailing list (Macnetworkprog@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/macnetworkprog/archive%40mail-archive.com This email sent to arch...@mail-archive.com