rtspconnection: add OSX specific hack to detect when a connection is refused
authorAlessandro Decina <alessandro.d@gmail.com>
Mon, 15 Aug 2011 21:41:24 +0000 (23:41 +0200)
committerAlessandro Decina <alessandro.d@gmail.com>
Mon, 15 Aug 2011 21:46:53 +0000 (23:46 +0200)
Unlike linux, OSX wakes up select with POLLOUT (instead of POLLERR) when
connect() is done async and the connection is refused. Therefore always check
for the socket error state using getsockopt (..., SO_ERROR, ...) after a
connection attempt.

gst-libs/gst/rtsp/gstrtspconnection.c

index 3e29efb2802e0d99f1cfc1fc0075fafd58e60265..2de21b977753e63ed36b79b8173578576d4ee6ae 100644 (file)
@@ -592,6 +592,14 @@ do_connect (const gchar * ip, guint16 port, GstPollFD * fdout,
     getsockopt (fd, SOL_SOCKET, SO_ERROR, (char *) &errno, &len);
 #endif
     goto sys_error;
+  } else {
+#ifdef __APPLE__
+    /* osx wakes up select with POLLOUT if the connection is refused... */
+    socklen_t len = sizeof (errno);
+    getsockopt (fd, SOL_SOCKET, SO_ERROR, (char *) &errno, &len);
+    if (errno != 0)
+      goto sys_error;
+#endif
   }
 
   gst_poll_fd_ignored (fdset, fdout);