Hi all,

it seems that pth_send() does not behave like send() if the socket descriptor
is closed only in the send direction. I patched the test_httpd.c (pth 1.4.1)
for a test case:

--- test_httpd.c.orig   Thu Jun 27 14:41:15 2002
+++ test_httpd.c        Thu Jun 27 14:50:53 2002
@@ -82,11 +82,14 @@ static void *handler(void *_arg)
                   "\r\n"
                   "Just a trivial test for GNU Pth\n"
                   "to show that it's serving data.\r\n", PTH_VERSION);
-    pth_write(fd, str, strlen(str));
+    pth_send(fd, str, strlen(str),0);

      /* close connection and let thread die */
      fprintf(stderr, "connection shutdown (fd: %d)\n", fd);
+    shutdown(fd,1);
+    pth_send(fd, "Surprise.\r\n", strlen("Surprise.\r\n"),0);
      close(fd);
+    fprintf(stderr, "connection really closed\n", fd);
      return NULL;
  }

shutdown(fd,1) closes the socket stream in the send direction. After that it is
tried to send data over this socket (this is a test in Sun's JCK).
send() would return -1 but pth_send() creates an event and puts the threads in
the waiting queue where the thread waits forever. A solution in pth_send() could be
to check if the socket can send data before putting the thread in the waiting queue.
I'm using -1 != send(fd,NULL,0,0) as a check on Linux as a workaround (but I do not
know if that is portable over all supported platforms).

Best reagards,
Martin Strassburger
______________________________________________________________________
GNU Portable Threads (Pth)            http://www.gnu.org/software/pth/
User Support Mailing List                            [EMAIL PROTECTED]
Automated List Manager (Majordomo)           [EMAIL PROTECTED]

Reply via email to