Apply BSD fix to connect call
authorScott Cantor <cantor.2@osu.edu>
Thu, 3 May 2012 22:27:16 +0000 (22:27 +0000)
committerScott Cantor <cantor.2@osu.edu>
Thu, 3 May 2012 22:27:16 +0000 (22:27 +0000)
shibsp/remoting/impl/TCPListener.cpp

index c498163..5f07611 100644 (file)
@@ -232,7 +232,17 @@ bool TCPListener::connect(ShibSocket& s) const
     if(SOCKET_ERROR==::connect(s, (const struct sockaddr*)&m_sockaddr, sizeof(m_sockaddr)))
         return log_error("connect");
 #else
+    // Newer BSDs require the struct length be passed based on the socket address.
+    // Others have no field for that and take the whole struct size like Windows does.
+# ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
+#  ifdef HAVE_STRUCT_SOCKADDR_STORAGE
+    if (::connect(s, (const struct sockaddr*)&m_sockaddr, m_sockaddr.ss_len) < 0)
+#  else
+    if (::connect(s, (const struct sockaddr*)&m_sockaddr, m_sockaddr.sin_len) < 0)
+#  endif
+# else
     if (::connect(s, (const struct sockaddr*)&m_sockaddr, sizeof(m_sockaddr)) < 0)
+# endif
         return log_error("connect");
 #endif
     return true;