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 3e29efb..2de21b9 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);