lynx-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

lynx-dev Lynx problem and fix for Open UNIX 8


From: Fiber McGee
Subject: lynx-dev Lynx problem and fix for Open UNIX 8
Date: Sat, 02 Mar 2002 12:34:00 -0600

Forwarded message from Jonathan Schilling <address@hidden>:

Hello,

Several users have found problems with lynx 2.8.x when running on the
new Caldera Open UNIX 8 operating system (a successor to the
SCO UnixWare 7 operating system for the IA-32 architecture).

The triggering catalyst is that for some as yet unknown reason, http
connections take a bit longer to materialize in Open UNIX 8 than they
did in UnixWare 7.

This comes into play in the code in HTTCP.c, function HTDoConnect().
The basic algorithm there is do a non-blocking connect(), if connection
still in progress do a select() with a time-out value, if connection still
not ready after the time-out do another connect(), if still needs time
go back to the select() and repeat.  On Open UNIX 8, this select()
is tending to time out, whereas in UnixWare 7 it didn't.

The actual problem is that the second connect() is tested for returning
EALREADY and EAGAIN, in which case it goes back and retries, but in our
case it is still returning EINPROGRESS (just like it did for the first
connect()), in which case it is failing and reporting an error message.

The fix is to add EINPROGRESS to the list of "acceptable" errors
after the second connect().

Attached is a context diff that implements this change.  It is made
against the latest development version (lynx2.8.5dev.7).  I have tested
it on both Open UNIX 8, where it is needed, and on UnixWare 7, where it
isn't, and it works correctly in both places.  I'm submitting this
change so you can include it in the lynx mainline tree.

[Bela Lubkin of Caldera (and a past lynx contributor) suggests a bolder
change, involving coalescing the errno checking after all the networking
calls into one place, so that all these errno dependencies can be
centralized.  It's a good notion, but I don't feel confident enough in
my understanding of either lynx or networking across platforms to submit
it myself.]

Regards,

Jonathan Schilling      Caldera International, Inc.     address@hidden


*** ./WWW/Library/Implementation/HTTCP.c..orig  Sat Oct  6 15:02:28 2001
--- ./WWW/Library/Implementation/HTTCP.c        Fri Mar  1 12:24:38 2002
***************
*** 1832,1838 ****
                **
                **  For some reason, SVR4 returns EAGAIN here instead of
                **  EALREADY, even though the man page says it should be
!               **  EALREADY.
                **
                **  For some reason, UCX pre 3 apparently returns
                **  errno = 18242 instead the EALREADY or EISCONN.
--- 1832,1839 ----
                **
                **  For some reason, SVR4 returns EAGAIN here instead of
                **  EALREADY, even though the man page says it should be
!               **  EALREADY.  SVR4/SVR5 systems can also return EINPROGRESS
!               **  here, just as they did on the first connect() call.
                **
                **  For some reason, UCX pre 3 apparently returns
                **  errno = 18242 instead the EALREADY or EISCONN.
***************
*** 1845,1850 ****
--- 1846,1852 ----
  #endif /* INET6 */
                if ((status < 0) &&
                    (SOCKET_ERRNO != EALREADY
+                   && SOCKET_ERRNO != EINPROGRESS
  #ifdef EAGAIN
                    && SOCKET_ERRNO != EAGAIN
  #endif



; To UNSUBSCRIBE: Send "unsubscribe lynx-dev" to address@hidden

reply via email to

[Prev in Thread] Current Thread [Next in Thread]