mvadkert / rpms / tigervnc

Forked from rpms/tigervnc 6 years ago
Clone
Blob Blame History Raw
diff --git a/common/network/TcpSocket.cxx b/common/network/TcpSocket.cxx
index 1ebaeec..2d7a52f 100644
--- a/common/network/TcpSocket.cxx
+++ b/common/network/TcpSocket.cxx
@@ -369,18 +369,12 @@ bool TcpSocket::cork(int sock, bool enable) {
 #endif
 }

-bool TcpSocket::isSocket(int sock)
-{
-  vnc_sockaddr_t sa;
-  socklen_t sa_size = sizeof(sa);
-  return getsockname(sock, &sa.u.sa, &sa_size) >= 0;
-}
-
-bool TcpSocket::isConnected(int sock)
+bool TcpSocket::isListening(int sock)
 {
-  vnc_sockaddr_t sa;
-  socklen_t sa_size = sizeof(sa);
-  return getpeername(sock, &sa.u.sa, &sa_size) >= 0;
+  int listening = 0;
+  socklen_t listening_size = sizeof(listening);
+  return getsockopt(sock, SOL_SOCKET, SO_ACCEPTCONN, &listening,
+                    &listening_size) >= 0 && listening;
 }

 int TcpSocket::getSockPort(int sock)
diff --git a/common/network/TcpSocket.h b/common/network/TcpSocket.h
index 979cd4b..2bfe47b 100644
--- a/common/network/TcpSocket.h
+++ b/common/network/TcpSocket.h
@@ -65,8 +65,7 @@ namespace network {

     static bool enableNagles(int sock, bool enable);
     static bool cork(int sock, bool enable);
-    static bool isSocket(int sock);
-    static bool isConnected(int sock);
+    static bool isListening(int sock);
     static int getSockPort(int sock);
   private:
     bool closeFd;
diff --git a/unix/xserver/hw/vnc/vncExtInit.cc b/unix/xserver/hw/vnc/vncExtInit.cc
index e307e31..dc449bd 100644
--- a/unix/xserver/hw/vnc/vncExtInit.cc
+++ b/unix/xserver/hw/vnc/vncExtInit.cc
@@ -137,8 +137,7 @@ void vncExtensionInit(void)
         std::list<network::TcpListener> listeners;
         std::list<network::TcpListener> httpListeners;
         if (scr == 0 && vncInetdSock != -1) {
-          if (network::TcpSocket::isSocket(vncInetdSock) &&
-              !network::TcpSocket::isConnected(vncInetdSock))
+          if (network::TcpSocket::isListening(vncInetdSock))
           {
             listeners.push_back (network::TcpListener(vncInetdSock));
             vlog.info("inetd wait");