udpsrc: Ignore G_IO_ERROR_CONNECTION_CLOSED when receiving data
authorSebastian Dröge <sebastian@centricular.com>
Fri, 4 Sep 2015 09:01:52 +0000 (12:01 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 4 Sep 2015 09:01:52 +0000 (12:01 +0300)
This happens on Windows if we use the same socket for sending packets,
and the remote sends ICMP port/host unreachable messages.

https://bugzilla.gnome.org/show_bug.cgi?id=754534

gst/udp/gstudpsrc.c

index 8fdb868..b6b2e20 100644 (file)
@@ -576,10 +576,12 @@ retry:
       NULL, NULL, &flags, udpsrc->cancellable, &err);
 
   if (G_UNLIKELY (res < 0)) {
-    /* EHOSTUNREACH for a UDP socket means that a packet sent with udpsink
-     * generated a "port unreachable" ICMP response. We ignore that and try
-     * again. */
-    if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_HOST_UNREACHABLE)) {
+    /* G_IO_ERROR_HOST_UNREACHABLE for a UDP socket means that a packet sent
+     * with udpsink generated a "port unreachable" ICMP response. We ignore
+     * that and try again.
+     * On Windows we get G_IO_ERROR_CONNECTION_CLOSED instead */
+    if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_HOST_UNREACHABLE) ||
+        g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CONNECTION_CLOSED)) {
       g_clear_error (&err);
       goto retry;
     }