PatchSet 4001 
Date: 2003/08/31 17:16:47
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
Various fixes.

Noticeable changes:
Reimplementation of deleteOnExit (missing in classpath)
Removed SoInterrupt because it is wrong.
Implemented fsync for pthreads.

Members: 
        ChangeLog:1.1597->1.1598 
        include/Makefile.am:1.47->1.48 
        include/Makefile.in:1.119->1.120 
        kaffe/kaffevm/systems/unix-pthreads/syscalls.c:1.14->1.15 
        libraries/clib/io/File.c:1.20->1.21 
        libraries/clib/io/FileDescriptor.c:1.5->1.6 
        libraries/clib/net/NetworkInterface.c:1.2->1.3 
        libraries/clib/net/PlainDatagramSocketImpl.c:1.27->1.28 
        libraries/clib/net/PlainSocketImpl.c:1.31->1.32 
        libraries/javalib/java/io/File.java:1.35->1.36 
        libraries/javalib/java/lang/Runtime.java:1.25->1.26 
        libraries/javalib/java/lang/Thread.java:1.42->1.43 
        test/regression/Makefile.am:1.81->1.82 
        test/regression/Makefile.in:1.134->1.135 
        test/regression/SoInterrupt.java:1.5->1.6(DEAD) 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1597 kaffe/ChangeLog:1.1598
--- kaffe/ChangeLog:1.1597      Sat Aug 30 23:57:08 2003
+++ kaffe/ChangeLog     Sun Aug 31 17:16:47 2003
@@ -1,3 +1,36 @@
+2003-08-31  Guilhem Lavaux <[EMAIL PROTECTED]>
+
+       * kaffe/kaffevm/systems/unix-pthreads/syscalls.c:
+       (jthreadedFSync) added.
+       (Kaffe_SystemCallInterface) added jthreadedFSync.
+
+       * libraries/clib/net/PlainDatagramSocketImpl.c:
+       (java_net_PlainDatagramSocketImpl_receive) check if pkt is NULL
+       and throw NullPointerException if it is the case.
+       Changed the way EINTR is handled (it must be ignored).
+       ETIMEDOUT throws a better exception with bytesTransferred set to
+       the right value.
+       
+       * libraries/clib/net/PlainSocketImpl.c:
+       (java_net_PlainSocketImpl_receive) see above for the changed behaviour.
+       (java_net_PlainSocketImpl_accept) EINTR is now ignored.
+
+       * libraries/clib/io/File.c:
+       (java_io_File_listInternal) check whether the pointer is null.
+
+       * libraries/clib/io/FileDescriptor.c:
+       (getFileSize) don't return an error if there isn't.
+
+       * include/Makefile.am:
+       (NOINSTALL_DERIVED_HDRS) added java_io_InterruptedIOException.h
+
+       * test/regression/SoInterrupt.java: removed. This test was a
+       non-sense from the beginning to the end.
+
+       * test/regression/Makefile.am: removed SoInterrupt.java
+
+       * test/regression/Makefile.in: regenerated.
+
 2003-08-30  Timothy S. Stack <[EMAIL PROTECTED]>
 
        * include/jni.h, include/jvmpi.h:
Index: kaffe/include/Makefile.am
diff -u kaffe/include/Makefile.am:1.47 kaffe/include/Makefile.am:1.48
--- kaffe/include/Makefile.am:1.47      Sat Aug 30 14:18:23 2003
+++ kaffe/include/Makefile.am   Sun Aug 31 17:16:48 2003
@@ -47,6 +47,7 @@
        java_io_FileInputStream.h \
        java_io_FileOutputStream.h \
        java_io_InputStream.h \
+       java_io_InterruptedIOException.h \
        java_io_ObjectInputStream.h \
        java_io_PrintStream.h \
        java_io_RandomAccessFile.h \
Index: kaffe/include/Makefile.in
diff -u kaffe/include/Makefile.in:1.119 kaffe/include/Makefile.in:1.120
--- kaffe/include/Makefile.in:1.119     Sat Aug 30 14:18:23 2003
+++ kaffe/include/Makefile.in   Sun Aug 31 17:16:48 2003
@@ -282,6 +282,7 @@
        java_io_FileInputStream.h \
        java_io_FileOutputStream.h \
        java_io_InputStream.h \
+       java_io_InterruptedIOException.h \
        java_io_ObjectInputStream.h \
        java_io_PrintStream.h \
        java_io_RandomAccessFile.h \
Index: kaffe/kaffe/kaffevm/systems/unix-pthreads/syscalls.c
diff -u kaffe/kaffe/kaffevm/systems/unix-pthreads/syscalls.c:1.14 
kaffe/kaffe/kaffevm/systems/unix-pthreads/syscalls.c:1.15
--- kaffe/kaffe/kaffevm/systems/unix-pthreads/syscalls.c:1.14   Fri Aug  8 14:38:25 
2003
+++ kaffe/kaffe/kaffevm/systems/unix-pthreads/syscalls.c        Sun Aug 31 17:16:48 
2003
@@ -249,6 +249,17 @@
 }
 
 static int
+jthreadedFSync(int fd)
+{
+       int rc = 0;
+       
+       if (fsync(fd) == -1) {
+               rc = errno;
+       }
+       return (rc);
+}
+
+static int
 jthreadedMkdir(const char *path, int mode)
 {
        int rc = 0;
@@ -880,6 +891,7 @@
         jthreadedFStat,
         jthreadedStat,
         jthreadedFTruncate,
+        jthreadedFSync,
         jthreadedMkdir,
         jthreadedRmdir,
         jthreadedRename,
Index: kaffe/libraries/clib/io/File.c
diff -u kaffe/libraries/clib/io/File.c:1.20 kaffe/libraries/clib/io/File.c:1.21
--- kaffe/libraries/clib/io/File.c:1.20 Sat Aug 30 14:18:24 2003
+++ kaffe/libraries/clib/io/File.c      Sun Aug 31 17:16:49 2003
@@ -272,7 +272,7 @@
     mentry = dirlist;
     dirlist = mentry->next;
     unhand_array(array)->body[i] =
-      (Hjava_lang_Object*)stringC2Java(mentry->name);
+      (Hjava_lang_Object*)checkPtr(stringC2Java(mentry->name));
     /* if allocation fails, continue freeing mentries in
        this loop. */
     oom |= !unhand_array(array)->body[i];
Index: kaffe/libraries/clib/io/FileDescriptor.c
diff -u kaffe/libraries/clib/io/FileDescriptor.c:1.5 
kaffe/libraries/clib/io/FileDescriptor.c:1.6
--- kaffe/libraries/clib/io/FileDescriptor.c:1.5        Sat Aug 30 20:24:59 2003
+++ kaffe/libraries/clib/io/FileDescriptor.c    Sun Aug 31 17:16:49 2003
@@ -274,7 +274,7 @@
 
   if (rc == 0 && S_ISREG(statbuf.st_mode)) {
     *fileSize = statbuf.st_size;
-  }
+  } else
   if (rc == 0)
   {
     rc = EINVAL;
Index: kaffe/libraries/clib/net/NetworkInterface.c
diff -u kaffe/libraries/clib/net/NetworkInterface.c:1.2 
kaffe/libraries/clib/net/NetworkInterface.c:1.3
--- kaffe/libraries/clib/net/NetworkInterface.c:1.2     Sat Aug 30 14:18:25 2003
+++ kaffe/libraries/clib/net/NetworkInterface.c Sun Aug 31 17:16:49 2003
@@ -97,7 +97,7 @@
                        &((struct sockaddr_in *)sa)->sin_addr,
                        addr,
                        NII_MAX_ADDRESS_SIZE);
-             address_string = stringC2Java(addr);
+             address_string = checkPtr(stringC2Java(addr));
              break;
 #if defined(AF_INET6)
            case AF_INET6:
@@ -105,7 +105,7 @@
                        &((struct sockaddr_in6 *)sa)->sin6_addr,
                        addr,
                        NII_MAX_ADDRESS_SIZE);
-             address_string = stringC2Java(addr);
+             address_string = checkPtr(stringC2Java(addr));
 #endif
            default:
              /* XXX What to do? */
@@ -133,7 +133,7 @@
   while (ifa != NULL)
     {
       struct Hjava_lang_String* iface_name =
-       stringC2Java(ifa->ifa_name);
+       checkPtr(stringC2Java(ifa->ifa_name));
       struct Hjava_net_InetAddress* addr;
       
       addr = getInetAddress(ifa);
Index: kaffe/libraries/clib/net/PlainDatagramSocketImpl.c
diff -u kaffe/libraries/clib/net/PlainDatagramSocketImpl.c:1.27 
kaffe/libraries/clib/net/PlainDatagramSocketImpl.c:1.28
--- kaffe/libraries/clib/net/PlainDatagramSocketImpl.c:1.27     Sat Aug 30 14:18:25 
2003
+++ kaffe/libraries/clib/net/PlainDatagramSocketImpl.c  Sun Aug 31 17:16:49 2003
@@ -17,6 +17,7 @@
 #include <native.h>
 #include "java_lang_Integer.h"
 #include "java_io_FileDescriptor.h"
+#include "java_io_InterruptedIOException.h"
 #include "java_net_DatagramPacket.h"
 #include "java_net_NetworkInterface.h"
 #include "java_net_SocketAddress.h"
@@ -29,6 +30,7 @@
 #include <jsyscall.h>
 #include "../../../kaffe/kaffevm/debug.h"
 #include "../../../kaffe/kaffevm/itypes.h"
+#include "../../../kaffe/kaffevm/exception.h"
 
 /*
  * Supported socket options
@@ -241,9 +243,12 @@
        int alen = sizeof(addr);
        HArrayOfByte *array_address;
        int i;
+       int to_read, offset;
 
        assert(this != NULL);
-       assert(pkt != NULL);
+       if (pkt == NULL || unhand(pkt)->buffer == NULL)
+               SignalError("java.lang.NullPointerException", "null datagram packet");
+       assert(unhand(pkt)->length <= unhand(unhand(pkt)->buffer)->length);
 
 DBG(NATIVENET,
        dprintf("datagram_receive(%p, %p [%d bytes])\n",
@@ -254,25 +259,39 @@
        addr.sin_port = htons(unhand(this)->localPort);
 
        /* XXX should assert (unhand(pkt)->length <= 
unhand_array(unhand(pkt)->buf)->length), no? */
-
-       rc = KRECVFROM(unhand(unhand(this)->fd)->nativeFd,
-               &(unhand_array(unhand(pkt)->buffer)->body)[unhand(pkt)->offset],
-               unhand(pkt)->length, 0, (struct sockaddr*)&addr,
-               &alen, unhand(this)->timeout, &r);
-       switch( rc )
-       {
-       case 0:
-               break;
-       case ETIMEDOUT:
-               SignalError("java.net.SocketTimeoutException", SYS_ERROR(rc));
-               break;
-       case EINTR:
-               SignalError("java.io.InterruptedIOException", SYS_ERROR(rc));
-               break;
-       default:
-               SignalError("java.net.SocketException", SYS_ERROR(rc));
-               break;
-       }
+        offset = unhand(pkt)->offset; 
+       to_read = unhand(pkt)->length;
+        do { 
+               rc = KRECVFROM(unhand(unhand(this)->fd)->nativeFd,
+                              &(unhand_array(unhand(pkt)->buffer)->body)[offset],
+                              to_read, 0, (struct sockaddr*)&addr,
+                              &alen, unhand(this)->timeout, &r);
+               switch( rc )
+               {
+               case 0:
+                       break;
+               case ETIMEDOUT: {
+                       struct Hjava_io_InterruptedIOException* except;
+                 
+                       except = (struct Hjava_io_InterruptedIOException *)
+                         execute_java_constructor(
+                                                  "java.net.SocketTimeoutException", 
0, 0,
+                                                  "([Ljava/lang/String;)V",
+                                                  checkPtr(stringC2Java("Read timed 
out")));
+                       except->bytesTransferred = offset-unhand(pkt)->offset;
+                       
+                       throwException((struct Hjava_lang_Throwable*)except);
+                       break;
+               }
+               case EINTR:
+                       break;
+               default:
+                       SignalError("java.net.SocketException", SYS_ERROR(rc));
+                       break;
+               }
+               to_read -= r;
+               offset += r;
+       } while (rc == EINTR);
 
        unhand(pkt)->length = r;
        unhand(pkt)->port = ntohs(addr.sin_port);
Index: kaffe/libraries/clib/net/PlainSocketImpl.c
diff -u kaffe/libraries/clib/net/PlainSocketImpl.c:1.31 
kaffe/libraries/clib/net/PlainSocketImpl.c:1.32
--- kaffe/libraries/clib/net/PlainSocketImpl.c:1.31     Sat Aug 30 14:18:25 2003
+++ kaffe/libraries/clib/net/PlainSocketImpl.c  Sun Aug 31 17:16:49 2003
@@ -20,12 +20,14 @@
 #include "java_net_InetAddress.h"
 #include "java_net_PlainSocketImpl.h"
 #include "java_net_SocketOptions.h"
+#include "java_io_InterruptedIOException.h"
 #include "nets.h"
 #include <jsyscall.h>
 #include <jthread.h>
 #include "../../../kaffe/kaffevm/debug.h"
 #include "../../../kaffe/kaffevm/object.h"
 #include "../../../kaffe/kaffevm/itypes.h"
+#include "../../../kaffe/kaffevm/exception.h"
 
 #include "dummyin6.h"
 
@@ -313,11 +315,10 @@
            )
 
        alen = sizeof(addr);
-       rc = KACCEPT(unhand(unhand(this)->fd)->nativeFd, (struct sockaddr*)&addr, 
&alen, unhand(this)->timeout, &r);
-       if (rc == EINTR) {
-               SignalError("java.io.InterruptedIOException", 
-                           "Accept was interrupted");
-       }
+       do {
+               rc = KACCEPT(unhand(unhand(this)->fd)->nativeFd,
+                            (struct sockaddr*)&addr, &alen, unhand(this)->timeout, 
&r);
+       } while (rc == EINTR);
        if (rc == ETIMEDOUT) {
                SignalError("java.net.SocketTimeoutException",
                            "Accept timed out");
@@ -562,6 +563,7 @@
         ssize_t r;
        int rc;
        int fd;
+       int total_read;
 
        DBG(NATIVENET,
            dprintf("socket_read(%p, %p, %d, %d)\n", 
@@ -573,24 +575,32 @@
                SignalError("java.io.IOException", "fd invalid"); 
        }
 
-        rc = KSOCKREAD(fd, &unhand_array(buf)->body[offset], len, 
unhand(this)->timeout, &r);
-       if (rc == EINTR || rc == ETIMEDOUT) {
-               SignalError("java.io.InterruptedIOException", 
-                           "Read was interrupted");
-       }
-       if (rc == ETIMEDOUT) {
-               SignalError("java.net.SocketTimeoutException",
-                           "Read timed out");
-       }
-        if (rc) {
-                SignalError("java.io.IOException", SYS_ERROR(rc));
-        }
-        else if (r == 0 && len > 0) {
-                return (-1);    /* EOF */
-        }
-        else {
-                return (r);
-        }
+       total_read = 0;
+       r = 0;
+       do {
+                rc = KSOCKREAD(fd, &unhand_array(buf)->body[offset], len, 
unhand(this)->timeout, &r);
+
+                if (rc == ETIMEDOUT) {
+                        struct Hjava_io_InterruptedIOException* except;
+
+                        except = (struct Hjava_io_InterruptedIOException *)
+                          execute_java_constructor(
+                                                   "java.net.SocketTimeoutException", 
0, 0,
+                                                   "(Ljava/lang/String;)V",
+                                                   checkPtr(stringC2Java("Read was 
interrupted")));
+                        except->bytesTransferred = r;
+             
+                        throwException((struct Hjava_lang_Throwable*)except);
+                } else if (rc != EINTR && rc != 0) {
+                  SignalError("java.io.IOException", SYS_ERROR(rc));
+                } else if (rc == 0 && r == 0 && len > 0) {
+                  return (-1);
+                }
+                offset += r;
+                len -= r;
+                total_read += r;
+       } while (rc == EINTR);
+       return (total_read);
 }
 
 void
Index: kaffe/libraries/javalib/java/io/File.java
diff -u kaffe/libraries/javalib/java/io/File.java:1.35 
kaffe/libraries/javalib/java/io/File.java:1.36
--- kaffe/libraries/javalib/java/io/File.java:1.35      Sat Aug 30 14:18:31 2003
+++ kaffe/libraries/javalib/java/io/File.java   Sun Aug 31 17:16:50 2003
@@ -42,6 +42,8 @@
 import java.net.URL;
 import gnu.classpath.Configuration;
 import gnu.java.io.PlatformHelper;
+import java.util.LinkedList;
+import java.util.Iterator;
 
 /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
  * "The Java Language Specification", ISBN 0-201-63451-1
@@ -1241,6 +1243,37 @@
       s.checkRead (path);
   }
 
+  static class DeleteFileHelper extends Thread
+  {
+    LinkedList filesToDelete = new LinkedList();
+
+    public DeleteFileHelper()
+    {
+      Runtime.getRuntime().addShutdownHook (this);
+    }
+    
+    public void run()
+    {
+      Iterator fileIterator = filesToDelete.iterator();
+
+      while (fileIterator.hasNext())
+       {
+         String path = (String)fileIterator.next();
+         try
+           {
+             File f = new File(path);
+
+             f.delete();
+           }
+         catch (Throwable _)
+           {
+           }
+       }
+    }
+  }
+
+  private static DeleteFileHelper deleteHelper = new DeleteFileHelper();
+
   /** 
    * Calling this method requests that the file represented by this object
    * be deleted when the virtual machine exits.  Note that this request cannot
@@ -1258,11 +1291,8 @@
     if (sm != null)
       sm.checkDelete(path);
 
-    // Sounds like we need to do some VM specific stuff here. We could delete
-    // the file in finalize() and set FinalizeOnExit to true, but delete on
-    // finalize != delete on exit and we should not be setting up system
-    // parameters without the user's knowledge.
-    // FIXME: ********IMPLEMENT ME!!!!!!***************
+    deleteHelper.filesToDelete.add (getAbsolutePath());
+    
     return;
   }
 
Index: kaffe/libraries/javalib/java/lang/Runtime.java
diff -u kaffe/libraries/javalib/java/lang/Runtime.java:1.25 
kaffe/libraries/javalib/java/lang/Runtime.java:1.26
--- kaffe/libraries/javalib/java/lang/Runtime.java:1.25 Sat Jul 26 17:28:36 2003
+++ kaffe/libraries/javalib/java/lang/Runtime.java      Sun Aug 31 17:16:50 2003
@@ -240,13 +240,21 @@
        hook_enum = shutdownHooks.elements();
        while (hook_enum.hasMoreElements()) {
               Thread hook = (Thread)hook_enum.nextElement();
+              boolean join_interrupted = false;
 
               /* XXX Should this timeout? */
-              try {
-                      hook.join();
-              } catch (Exception e) {
-                      e.printStackTrace();
+              do
+              {
+                      join_interrupted = false;
+                      try {
+                              hook.join();
+                      } catch (InterruptedException _) {
+                              join_interrupted = true;
+                      } catch (Exception e) {
+                              e.printStackTrace();
+                      }
               }
+              while (join_interrupted);
        }
        return true;
 }
Index: kaffe/libraries/javalib/java/lang/Thread.java
diff -u kaffe/libraries/javalib/java/lang/Thread.java:1.42 
kaffe/libraries/javalib/java/lang/Thread.java:1.43
--- kaffe/libraries/javalib/java/lang/Thread.java:1.42  Wed Jul  9 10:01:57 2003
+++ kaffe/libraries/javalib/java/lang/Thread.java       Sun Aug 31 17:16:50 2003
@@ -240,7 +240,7 @@
                }
        }
        else {
-               /* Can't to it in java - so ask the system to try */
+               /* Can't do it in java - so ask the system to try */
                interrupt0();
        }
 }
Index: kaffe/test/regression/Makefile.am
diff -u kaffe/test/regression/Makefile.am:1.81 kaffe/test/regression/Makefile.am:1.82
--- kaffe/test/regression/Makefile.am:1.81      Mon Aug 18 06:34:46 2003
+++ kaffe/test/regression/Makefile.am   Sun Aug 31 17:16:50 2003
@@ -149,7 +149,8 @@
 
 TEST_REFLECTION = \
        ReflectInvoke.java \
-       InvTarExcTest.java 
+       InvTarExcTest.java \
+       DeleteFile.java
 
 ## tests for ClassLoader
 TEST_CLASS_LOADING = \
@@ -205,7 +206,6 @@
 ## Test interrupting I/O
 ## This is kind of tricky, and Sun doesn't support it.
 TEST_INTERRUPTING_IO = \
-       SoInterrupt.java \
        sysdepCallMethod.java 
 
 ## This one is skipped unless you --enable-debug.
Index: kaffe/test/regression/Makefile.in
diff -u kaffe/test/regression/Makefile.in:1.134 kaffe/test/regression/Makefile.in:1.135
--- kaffe/test/regression/Makefile.in:1.134     Mon Aug 18 06:34:46 2003
+++ kaffe/test/regression/Makefile.in   Sun Aug 31 17:16:50 2003
@@ -383,7 +383,8 @@
 
 TEST_REFLECTION = \
        ReflectInvoke.java \
-       InvTarExcTest.java 
+       InvTarExcTest.java \
+       DeleteFile.java
 
 
 TEST_CLASS_LOADING = \
===================================================================
Checking out kaffe/test/regression/SoInterrupt.java
RCS:  /home/cvs/kaffe/kaffe/test/regression/Attic/SoInterrupt.java,v
VERS: 1.5
***************
--- kaffe/test/regression/SoInterrupt.java      Sun Aug 31 17:19:02 2003
+++ /dev/null   Sun Aug  4 19:57:58 2002
@@ -1,136 +0,0 @@
-/**
- * Test interruptable I/O.
- *
- * Note that this test will not run under Sun's JDK1.2 on Solaris, see
- * http://developer.java.sun.com/developer/bugParade/bugs/4178050.html
- *
- * It's unlikely to work on Windows either, see
- * http://developer.java.sun.com/developer/bugParade/bugs/4154947.html
- *
- * It it supported by Kaffe's jthreads, though it may not work under other
- * threading systems either.  XXX
- *
- * @author Godmar Back <[EMAIL PROTECTED]>
- */
-import java.net.*;
-import java.io.*;
-
-public class SoInterrupt {
-    public static void main(String av[]) throws Exception {
-       final boolean verbose = av.length > 0;
-       final String foo = "foo";
-       final Thread main = Thread.currentThread();
-
-       int tryport = 45054;
-       ServerSocket server;
-       for(;;++tryport) {
-           try {
-               server = new ServerSocket(tryport);
-               break;
-           } catch (IOException _) {}
-       }
-        final int port = tryport;
-       Thread watchdog = new Thread() {
-           public void run() {
-               try {
-                   Thread.sleep(10 * 1000);
-               } catch (InterruptedException _) { }
-               System.out.println("Watchdog Failure: Time out.");
-               System.exit(1);
-           }
-       };
-       watchdog.start();
-
-        Thread t = new Thread() {
-            public void run() {
-               try {
-                   // let main thread wait a while
-                   try {
-                       Thread.sleep(1000);
-                   } catch (InterruptedException e) {
-                       System.out.println("Failure " + e);
-                   }
-                   if (verbose)
-                       System.out.println("interrupting " + main);
-                   // interrupt it
-                   main.interrupt();
-                   // give it some more time
-                   try {
-                       Thread.sleep(1000);
-                   } catch (InterruptedException e) {
-                       System.out.println("Failure " + e);
-                   }
-
-                   // now connect
-                   if (verbose)
-                       System.out.println("connecting...");
-                   Socket s = new Socket(InetAddress.getByName(null), port);
-                   // wait some
-                   try {
-                       Thread.sleep(1000);
-                   } catch (InterruptedException e) {
-                       System.out.println("Failure " + e);
-                   }
-
-                   if (verbose)
-                       System.out.println("interrupting again " + main);
-                   // interrupt it again
-                   main.interrupt();
-                   // wait some more
-                   try {
-                       Thread.sleep(1000);
-                   } catch (InterruptedException e) {
-                       System.out.println("Failure " + e);
-                   }
-
-                   // now finish up
-                   PrintWriter p = new PrintWriter(s.getOutputStream());
-                   p.println(foo);
-                   p.close();
-               } catch (Exception e) {
-                   System.out.println("Failure " + e);
-               }
-            }
-        };
-        t.start();
-        Socket rsocket = null;
-       try {
-           if (verbose)
-               System.out.println("waiting for client...");
-           rsocket = server.accept(); 
-           if (verbose)
-               System.out.println("accepted..." + rsocket);
-       } catch (InterruptedIOException e) {
-           if (verbose)
-               System.out.println(e);
-           System.out.println("Success 1.");
-       }
-       if (verbose)
-           System.out.println("waiting for client again...");
-       rsocket = server.accept(); 
-       System.out.println("Success 2.");
-       InputStream is = rsocket.getInputStream();
-       LineNumberReader r = new LineNumberReader(new InputStreamReader(is));
-        byte []b = null;
-        try {
-           r.readLine();
-       } catch (InterruptedIOException e) {
-           // System.out.println(e);
-           System.out.println("Success 3.");
-       }
-       String s = r.readLine();
-       if (s.equals(foo)) {
-           System.out.println("Success 4.");
-       } else {
-           System.out.println("Failure: `" + s + "'");
-       }
-       System.exit(0);
-    }
-}
-
-/* Expected Output:
-Success 1.
-Success 2.
-Success 3.
-Success 4.
-*/

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to