Changes to allow compiling on JDK7

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4948 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/java/com/tigervnc/network/SocketDescriptor.java b/java/com/tigervnc/network/SocketDescriptor.java
index eb2679d..3517a99 100644
--- a/java/com/tigervnc/network/SocketDescriptor.java
+++ b/java/com/tigervnc/network/SocketDescriptor.java
@@ -29,11 +29,10 @@
 
 import com.tigervnc.rdr.Exception;
 
-public class SocketDescriptor extends SocketChannel 
-                              implements FileDescriptor {
+public class SocketDescriptor implements FileDescriptor {
 
   public SocketDescriptor() throws Exception {
-    super(DefaultSelectorProvider());
+    DefaultSelectorProvider();
     try {
       channel = SocketChannel.open();
       channel.configureBlocking(false);
@@ -50,6 +49,14 @@
     }
   }
 
+  public void close() throws IOException {
+    try {
+      channel.close();
+    } catch(IOException e) {
+      throw new IOException(e.toString());
+    }
+  }
+
   private static SelectorProvider DefaultSelectorProvider() {
     // kqueue() selector provider on OS X is not working, fall back to select() for now
     String os = System.getProperty("os.name");
@@ -165,6 +172,18 @@
   public java.net.Socket socket() {
     return channel.socket();
   }
+ 
+  public SocketAddress getRemoteAddress() throws IOException {
+    if (isConnected())
+      return channel.socket().getRemoteSocketAddress();
+    return null;
+  }
+
+  public SocketAddress getLocalAddress() throws IOException {
+    if (isConnected())
+      return channel.socket().getLocalSocketAddress();
+    return null;
+  }
 
   public boolean isConnectionPending() {
     return channel.isConnectionPending();
diff --git a/java/com/tigervnc/network/TcpListener.java b/java/com/tigervnc/network/TcpListener.java
index d6e92ab..959d545 100644
--- a/java/com/tigervnc/network/TcpListener.java
+++ b/java/com/tigervnc/network/TcpListener.java
@@ -118,7 +118,11 @@
     }
 
     // Disable Nagle's algorithm, to reduce latency
-    TcpSocket.enableNagles(new_sock, false);
+    try {
+      new_sock.socket().setTcpNoDelay(true);
+    } catch (java.net.SocketException e) {
+      throw new SocketException(e.toString());
+    }
 
     // Create the socket object & check connection is allowed
     SocketDescriptor fd = null;
diff --git a/java/com/tigervnc/network/TcpSocket.java b/java/com/tigervnc/network/TcpSocket.java
index c4c1a8c..ac53aaf 100644
--- a/java/com/tigervnc/network/TcpSocket.java
+++ b/java/com/tigervnc/network/TcpSocket.java
@@ -142,23 +142,32 @@
     return address+"::"+port;
   }
 
-  public boolean sameMachine() {
-    SocketAddress peeraddr = ((SocketDescriptor)getFd()).socket().getRemoteSocketAddress();
-    SocketAddress myaddr = ((SocketDescriptor)getFd()).socket().getLocalSocketAddress();
-    return myaddr.equals(peeraddr);
+  public boolean sameMachine() throws Exception {
+    try {
+      SocketAddress peeraddr = ((SocketDescriptor)getFd()).getRemoteAddress();
+      SocketAddress myaddr = ((SocketDescriptor)getFd()).getLocalAddress();
+      return myaddr.equals(peeraddr);
+    } catch (IOException e) {
+      throw new Exception(e.toString());
+    }
   }
 
-  public void shutdown() {
-    super.shutdown();
+  public void shutdown() throws Exception {
+    try {
+      close();
+      super.shutdown();
+    } catch (IOException e) {
+      throw new Exception(e.toString());
+    }
   }
   
   public void close() throws IOException {
     ((SocketDescriptor)getFd()).close();
   }
   
-  public static boolean enableNagles(SocketChannel sock, boolean enable) {
+  public static boolean enableNagles(SocketDescriptor sock, boolean enable) {
     try {
-      sock.socket().setTcpNoDelay(!enable);
+      sock.channel.socket().setTcpNoDelay(!enable);
     } catch(java.net.SocketException e) {
       vlog.error("unable to setsockopt TCP_NODELAY: "+e.getMessage());
       return false;
diff --git a/java/com/tigervnc/vncviewer/CConn.java b/java/com/tigervnc/vncviewer/CConn.java
index 736994b..2faf787 100644
--- a/java/com/tigervnc/vncviewer/CConn.java
+++ b/java/com/tigervnc/vncviewer/CConn.java
@@ -776,9 +776,8 @@
   // close() closes the socket, thus waking up the RFB thread.
   public void close() {
     shuttingDown = true;
-    sock.shutdown();
     try {
-      sock.close();
+      sock.shutdown();
     } catch (java.lang.Exception e) {
       throw new Exception(e.toString());
     }
diff --git a/java/com/tigervnc/vncviewer/F8Menu.java b/java/com/tigervnc/vncviewer/F8Menu.java
index ca09ac2..317caf3 100644
--- a/java/com/tigervnc/vncviewer/F8Menu.java
+++ b/java/com/tigervnc/vncviewer/F8Menu.java
@@ -85,7 +85,7 @@
 
   public void actionPerformed(ActionEvent ev) {
     if (actionMatch(ev, exit)) {
-      cc.close();
+      cc.deleteWindow();
     } else if (actionMatch(ev, fullScreen)) {
       cc.toggleFullScreen();
     } else if (actionMatch(ev, restore)) {