jdk/src/share/classes/java/net/Inet6Address.java
changeset 17198 32db080a2a70
parent 16870 f35b2bd19761
child 18800 e7fa560afcfb
child 20821 e0d0a585aa49
--- a/jdk/src/share/classes/java/net/Inet6Address.java	Tue Apr 30 10:48:25 2013 +0200
+++ b/jdk/src/share/classes/java/net/Inet6Address.java	Mon Apr 29 23:07:22 2013 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -203,6 +203,12 @@
      */
     private transient NetworkInterface scope_ifname;  // null
 
+    /**
+     * set if the object is constructed with a scoped
+     * interface instead of a numeric scope id.
+     */
+    private boolean scope_ifname_set; // false;
+
     private static final long serialVersionUID = 6880410070516793377L;
 
     // Perform native initialization
@@ -332,7 +338,7 @@
         }
     }
 
-    private void initif(String hostName, byte addr[],NetworkInterface nif)
+    private void initif(String hostName, byte addr[], NetworkInterface nif)
         throws UnknownHostException
     {
         holder().hostName = hostName;
@@ -344,6 +350,7 @@
             scope_ifname = nif;
             scope_id = deriveNumericScope(nif);
             scope_id_set = true;
+            scope_ifname_set = true;  // for consistency
         }
     }
 
@@ -431,6 +438,7 @@
             try {
                 scope_ifname = NetworkInterface.getByName(ifname);
                 if (scope_ifname != null) {
+                    scope_ifname_set = true;
                     try {
                         scope_id = deriveNumericScope(scope_ifname);
                     } catch (UnknownHostException e) {
@@ -438,6 +446,12 @@
                         // the machine being used for deserialization has
                         // the same interface name but without IPv6 configured.
                     }
+                } else {
+                    /* the interface does not exist on this system, so we clear
+                     * the scope information completely */
+                    scope_id_set = false;
+                    scope_ifname_set = false;
+                    scope_id = 0;
                 }
             } catch (SocketException e) {}
 
@@ -784,8 +798,10 @@
     private synchronized void writeObject(java.io.ObjectOutputStream s)
         throws IOException
     {
-        if (scope_ifname != null)
+        if (scope_ifname != null) {
             ifname = scope_ifname.getName();
+            scope_ifname_set = true;
+        }
         s.defaultWriteObject();
     }
 }