OSU HTTP Server FAQ

This is the FAQ (Frequently Asked Questions) list for the HTTP Server written by David Jones. of Ohio State University and deals with questions specific to this server implementation. Because we're lame, you are on your own for pointers to documentation for other aspects of WWW tools, e.g., browsing clients and how to write HTML in general.

Questions answered in this FAQ:

  1. > What is the current version of the server?
  2. > Why does the server not run on port 80?
  3. > Is there a version for UCX/Multinet/TCPware/etc...?
  4. > Why does @build_multinet fail (types.h)?
  5. > Why don't the images I added to the root page work?
  6. > Why doesn't my script work?
  7. > Is the server year 2000 compliant?
  8. > What does "Thread List Exhausted on port..." in the log file mean?
  9. > Why does the server crash after upgrading my VAX to 7.2-1?

The FAQ was last updated 2-JAN-1999


Q: What is the current version of the server?

A: The current release version is 3.6b


Q: Why does the server not run on port 80?

A: You will see the message:

disable SYSPRV status: 1, prev set: 0
Warning, insufficient privilege to listen on requested TCP port (SYSPRV required

whenever the server is told to listen for requests on a TCP port in the range 0-1023 and the server image cannot enable the privilege SYSPRV. This can happen if you a) didn't INSTALL the HTTP_SERVER.EXE image with the SYSPRV privilege, or b) you have invoked the image in such a way that VMS fails to find its known file entry (KFE). "b" can happen with you mistakenly INSTALL the image with a rooted path instead of from its "regular" path.


Q: Is there a version for UCX/Multinet/TCPware/etc...?

A: There is support for TCP/IP stacks from DEC (UCX), TGV (Multinet), CMU (the free CMUTCP), TWG (Pathway), and Process Software (TCPware). See the file AAAREADME.TXT in the top of the source distribution for instructions on how to build the server with support for a given stack.

Note that most commercial TCP/IP offerings support DEC's UCX/BGDRIVER interface; if you need to support multiple servers in a multi-TCP environment, you might consider building a single version of the server with support for UCX. (This doesn't help if you need support for CMUTCP.)


Q: Why does @build_multinet fail (types.h)?

A: The Multinet version of the server may fail to build on VAXes running Multinet 3.3a in combination with the DEC C compiler, complaining about no linkage for time_t. This happens because of a bug in Mutlinets TYPES.H header file - they are testing for the pre-processor symbol __ALPHA where they should be testing for __DECC.

TGV has an official patch, but if you just edit multinet_common_root:[multinet.include.sys]types.h and change occurrences of __ALPHA to __DECC it fixes the problem.


Q: Why don't the images I added to the root page work?

All HREFs (hyperlinks and images) in the server's 'root' page (www_root:[serverdoc]index.html by default) must be in absolute form. A relative reference (e.g. <IMG SRC="campus.gif">), doesn't work because the 'base path' for the document can be either "/" or "/demo/" depending upon which URL the browser referenced. The relative references are appended to the base path by the client broswer, which results in invalid requests when the client's current base is "/" (requests "/campus.gif" instead of "/demo/campus.gif").


Q: Why don't my scripts work?

The HTTP server leverages DECnet functionality to make a very flexibile and efficient scripting system. Unfortunately, this flexibilty means a fair amount of arcane knowledge must be acquired to configure the scripts properly. The most frequent reasons scripts won't run are


Q: Is the server year 2000 compliant?

There are no known year 2000 issues with the server. Prior to version 3 of the server, the default date format for generated date strings was 'weekday, DD-MMM-YY hh:mm:ss GMT' (RFC 850) for maximimum compatibility with primitive browsers. Starting with 3.0, the default format is 'wdy, DD MMM YYYY hh:mm:ss GMT' (RFC 1123). The format used is determined by whether file_access.c is compiled with the macro symbol DATE_FORMAT_850 defined.

When the server receives an RFC 850 date string to decode (there are still many browsers that send that format), it assumes year values below 50 are 20xx and those above are 19xx.

The server will probably have problems with times after 2038, which is when the UNIX binary time carries into the sign bit for 32-bit integers.


Q: What does "Thread List Exhausted on port..." in the log file mean?

This message is placed in the error log file (http_server_err.log) when server has no client contexts available to service a newly accepted client connection. When this occurs, the server will wait for up to 3 seconds for a context to become available (due to completion of an existing connection). If a context becomes available within that time, it is assigned to the new connection and a new client thread is created to handle the HTTP request. If no context becomes available, the new connection is abruptly closed (sometime causing a "Document contains no data" message on the browser).

The number of contexts available is determine by the client limit, a number dynamically determined when the server starts based upon the resources available to the server process (e.g. byte limit) and system-wide SYSGEN parameters (e.g. channelcnt).


Q: Why does the server crash after upgrading my VAX to 7.2-1?

The 7.2-1 version of the pthreads (DECthreads) library changed the relationship between the requested stack size for a thread and the space actually reserved. Under the new scheme, server versions prior to 3.6b running on VAXes will have stacks that are too small for some of the threads - leading to crashes, hangs, and other erratic behaviour.

Version 3.6b increased the stack size for listener threads and the log flush thread so they now longer overflow on VMS 7.2-1.


David Jones, Ohio State University