Merge branch 'ipv6' of https://github.com/twaugh/tigervnc into ipv6
diff --git a/java/com/tigervnc/network/Socket.java b/java/com/tigervnc/network/Socket.java
index bcc920d..651dc05 100644
--- a/java/com/tigervnc/network/Socket.java
+++ b/java/com/tigervnc/network/Socket.java
@@ -58,7 +58,6 @@
   // Is the remote end on the same machine?
   abstract public boolean sameMachine();
 
-  // Was there a "?" in the ConnectionFilter used to accept this Socket?
   public void setRequiresQuery() {queryConnection = true;}
   public final boolean requiresQuery() {return queryConnection;}
 
@@ -78,29 +77,3 @@
   boolean isShutdown_;
   boolean queryConnection;
 }
-
-/*
-abstract class ConnectionFilter {
-  public abstract boolean verifyConnection(Socket s);
-};
-
-abstract class SocketListener {
-  public SocketListener() {
-    fd = null; filter = null;
-  }
-
-  // shutdown() stops the socket from accepting further connections
-  public abstract void shutdown();
-
-  // accept() returns a new Socket object if there is a connection
-  // attempt in progress AND if the connection passes the filter
-  // if one is installed.  Otherwise, returns 0.
-  public abstract Socket accept();
-
-  // setFilter() applies the specified filter to all new connections
-  public void setFilter(ConnectionFilter f) {filter = f;}
-  //public SocketDescriptor getFd() {return fd;}
-  protected FileDescriptor fd;
-  protected ConnectionFilter filter;
-};
-*/
diff --git a/java/com/tigervnc/network/SocketListener.java b/java/com/tigervnc/network/SocketListener.java
index a1b2c12..a1f5ea1 100644
--- a/java/com/tigervnc/network/SocketListener.java
+++ b/java/com/tigervnc/network/SocketListener.java
@@ -29,18 +29,15 @@
   public SocketListener() {}
 
   // shutdown() stops the socket from accepting further connections
-  abstract public void shutdown();
+  abstract public void shutdown() throws Exception;
 
   // accept() returns a new Socket object if there is a connection
   // attempt in progress AND if the connection passes the filter
   // if one is installed.  Otherwise, returns 0.
   abstract public Socket accept();
 
-  // setFilter() applies the specified filter to all new connections
-  //public void setFilter(ConnectionFilter* f) {filter = f;}
   public FileDescriptor getFd() {return fd;}
 
   protected FileDescriptor fd;
-  //protected ConnectionFilter* filter;
 
 }
diff --git a/java/com/tigervnc/network/TcpListener.java b/java/com/tigervnc/network/TcpListener.java
index bab9e4c..45ee8a4 100644
--- a/java/com/tigervnc/network/TcpListener.java
+++ b/java/com/tigervnc/network/TcpListener.java
@@ -84,12 +84,21 @@
     this(listenaddr, port, false, null, true);
   }
 
-//  TcpListener::~TcpListener() {
-//    if (closeFd) closesocket(fd);
-//  }
+  protected void finalize() throws Exception {
+    if (closeFd)
+      try {
+        ((SocketDescriptor)getFd()).close();
+      } catch (IOException e) {
+        throw new Exception(e.getMessage());
+      }
+  }
 
-  public void shutdown() {
-    //shutdown(getFd(), 2);
+  public void shutdown() throws Exception {
+    try {
+      ((SocketDescriptor)getFd()).shutdown();
+    } catch (IOException e) {
+      throw new Exception(e.getMessage());
+    }
   }
 
   public TcpSocket accept() {
@@ -132,32 +141,12 @@
     }
     fd.setChannel(new_sock);
     TcpSocket s = new TcpSocket(fd);
-    //if (filter && !filter->verifyConnection(s)) {
-    //  delete s;
-    //  return 0;
-    //}
     return s;
   }
 
-/*
-void TcpListener::getMyAddresses(std::list<char*>* result) {
-  const hostent* addrs = gethostbyname(0);
-  if (addrs == 0)
-    throw rdr::SystemException("gethostbyname", errorNumber);
-  if (addrs->h_addrtype != AF_INET)
-    throw rdr::Exception("getMyAddresses: bad family");
-  for (int i=0; addrs->h_addr_list[i] != 0; i++) {
-    const char* addrC = inet_ntoa(*((struct in_addr*)addrs->h_addr_list[i]));
-    char* addr = new char[strlen(addrC)+1];
-    strcpy(addr, addrC);
-    result->push_back(addr);
+  public int getMyPort() {
+    return ((SocketDescriptor)getFd()).socket().getLocalPort();
   }
-}
-  */
-
-  //public int getMyPort() {
-  //  return TcpSocket.getSockPort();
-  //}
 
   private boolean closeFd;
   private ServerSocketChannel channel;
diff --git a/java/com/tigervnc/network/TcpSocket.java b/java/com/tigervnc/network/TcpSocket.java
index 051a9d8..43787e4 100644
--- a/java/com/tigervnc/network/TcpSocket.java
+++ b/java/com/tigervnc/network/TcpSocket.java
@@ -113,8 +113,7 @@
   }
 
   public int getMyPort() {
-    SocketAddress address = ((SocketDescriptor)getFd()).socket().getLocalSocketAddress();
-    return ((InetSocketAddress)address).getPort();
+    return getSockPort();
   }
 
   public String getPeerAddress() {
@@ -184,7 +183,7 @@
   }
 
   public int getSockPort() {
-    return ((InetSocketAddress)((SocketDescriptor)getFd()).socket().getRemoteSocketAddress()).getPort();
+    return ((SocketDescriptor)getFd()).socket().getLocalPort();
   }
 
   /* Tunnelling support. */
diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java
index 0df39c8..1e0f223 100644
--- a/java/com/tigervnc/vncviewer/VncViewer.java
+++ b/java/com/tigervnc/vncviewer/VncViewer.java
@@ -457,7 +457,7 @@
       while (true) {
         Socket new_sock = listener.accept();
         if (new_sock != null)
-          newViewer(this, new_sock);
+          newViewer(this, new_sock, true);
       }
     }