We are aware of a problem with using JET with Javasoft's JVM for Solaris when that JVM is NOT using native threads. Basically, the interposed system libraries provided by the JVM change the state of open sockets from BLOCKING to NON_BLOCKING silently. This in turn makes TET behave badly because the output it is execting does not come in through the socket quickly enough and it hangs waiting for it. Below is a patch that helps address this problem. The real solution is to use the Solaris JVM with native threads, since in this environment the sockets work as expected. However, when using "green" threads, this patch works (as far as wek can tell). This patch should be applied to the TET source tree using the patch utility. A command like patch -d $TET_ROOT < README.Solaris should do the trick. --- src/tet3/inetlib/rdwr.c Wed Jul 23 06:52:45 1997 +++ /home/grad/rantapaa/spm/tet/src/tet3/inetlib/rdwr.c Wed Oct 22 22:05:05 1997 @@ -44,6 +44,7 @@ #include #include #include +#include #ifdef _WIN32 /* -START-WIN32-CUT- */ # include #else /* -END-WIN32-CUT- */ @@ -167,9 +168,22 @@ register struct tptab *tp = (struct tptab *) pp->pt_tdata; register int cnt, rc = -1; int err; + int flags; TRACE3(tet_Tio, 4, "doread: expect %s bytes on sd %s", tet_i2a(tp->tp_cnt), tet_i2a(tp->tp_sd)); + + if ( !(pp->pt_flags & PF_NBIO) ) { + if (fcntl(tp->tp_sd, F_GETFL, &flags) < 0) { + TRACE3(tet_Tio, 4, "doread: unable to get file flags for fd %s: %s", tet_i2a(tp->tp_sd), tet_errname(errno)); + } else { + if ( !(flags & O_NONBLOCK) ) { + if (fcntl(tp->tp_sd, F_SETFL, flags & ~O_NONBLOCK) < 0) { + TRACE3(tet_Tio, 4, "doread: unable to set non-blocking I/O on fd %s: %s", tet_i2a(tp->tp_sd), tet_errname(errno)); + } + } + } + } do { err = 0;