7eaa10a
diff -up tigervnc-1.2.80-20130314svn5065/common/network/TcpSocket.cxx.inetd-nowait tigervnc-1.2.80-20130314svn5065/common/network/TcpSocket.cxx
7eaa10a
--- tigervnc-1.2.80-20130314svn5065/common/network/TcpSocket.cxx.inetd-nowait	2013-05-23 12:20:35.836386218 +0100
7eaa10a
+++ tigervnc-1.2.80-20130314svn5065/common/network/TcpSocket.cxx	2013-05-23 12:23:04.698003213 +0100
7eaa10a
@@ -325,18 +325,12 @@ bool TcpSocket::cork(int sock, bool enab
7eaa10a
 #endif
7eaa10a
 }
7eaa10a
 
7eaa10a
-bool TcpSocket::isSocket(int sock)
7eaa10a
+bool TcpSocket::isListening(int sock)
7eaa10a
 {
7eaa10a
-  struct sockaddr_in info;
7eaa10a
-  socklen_t info_size = sizeof(info);
7eaa10a
-  return getsockname(sock, (struct sockaddr *)&info, &info_size) >= 0;
7eaa10a
-}
7eaa10a
-
7eaa10a
-bool TcpSocket::isConnected(int sock)
7eaa10a
-{
7eaa10a
-  struct sockaddr_in info;
7eaa10a
-  socklen_t info_size = sizeof(info);
7eaa10a
-  return getpeername(sock, (struct sockaddr *)&info, &info_size) >= 0;
7eaa10a
+  int listening = 0;
7eaa10a
+  socklen_t listening_size = sizeof(listening);
7eaa10a
+  return getsockopt(sock, SOL_SOCKET, SO_ACCEPTCONN, &listening,
7eaa10a
+                    &listening_size) >= 0 && listening;
7eaa10a
 }
7eaa10a
 
7eaa10a
 int TcpSocket::getSockPort(int sock)
7eaa10a
diff -up tigervnc-1.2.80-20130314svn5065/common/network/TcpSocket.h.inetd-nowait tigervnc-1.2.80-20130314svn5065/common/network/TcpSocket.h
7eaa10a
--- tigervnc-1.2.80-20130314svn5065/common/network/TcpSocket.h.inetd-nowait	2013-05-23 12:20:35.835386220 +0100
7eaa10a
+++ tigervnc-1.2.80-20130314svn5065/common/network/TcpSocket.h	2013-05-23 12:21:58.861730647 +0100
7eaa10a
@@ -57,8 +57,7 @@ namespace network {
7eaa10a
 
7eaa10a
     static bool enableNagles(int sock, bool enable);
7eaa10a
     static bool cork(int sock, bool enable);
7eaa10a
-    static bool isSocket(int sock);
7eaa10a
-    static bool isConnected(int sock);
7eaa10a
+    static bool isListening(int sock);
7eaa10a
     static int getSockPort(int sock);
7eaa10a
   private:
7eaa10a
     bool closeFd;
7eaa10a
diff -up tigervnc-1.2.80-20130314svn5065/unix/xserver/hw/vnc/vncExtInit.cc.inetd-nowait tigervnc-1.2.80-20130314svn5065/unix/xserver/hw/vnc/vncExtInit.cc
7eaa10a
--- tigervnc-1.2.80-20130314svn5065/unix/xserver/hw/vnc/vncExtInit.cc.inetd-nowait	2013-03-14 17:11:22.000000000 +0000
7eaa10a
+++ tigervnc-1.2.80-20130314svn5065/unix/xserver/hw/vnc/vncExtInit.cc	2013-05-23 12:21:10.545530308 +0100
7eaa10a
@@ -225,8 +225,7 @@ void vncExtensionInit()
7eaa10a
         network::TcpListener* listener = 0;
7eaa10a
         network::TcpListener* httpListener = 0;
7eaa10a
         if (scr == 0 && vncInetdSock != -1) {
7eaa10a
-          if (network::TcpSocket::isSocket(vncInetdSock) &&
7eaa10a
-              !network::TcpSocket::isConnected(vncInetdSock))
7eaa10a
+          if (network::TcpSocket::isListening(vncInetdSock))
7eaa10a
           {
7eaa10a
             listener = new network::TcpListener(NULL, 0, 0, vncInetdSock, true);
7eaa10a
             vlog.info("inetd wait");