Generic Network Communication

/*
**	(c) COPYRIGHT CERN 1994.
**	Please first read the full copyright statement in the file COPYRIGH.
*/
This module has the common code for handling TCP/IP and DECnet connections etc. The main topics of functions in this module are: This module is implemented by HTTCP.c, and it is a part of the Library of Common Code.
#ifndef HTTCP_H
#define HTTCP_H
#include "HTAccess.h"

Connection Management

All connections are established through the following functions.

Active Connection Establishment

This makes an active connect to the specified host. The HTNetInfo structure is parsed in order to handle errors. Default port might be overwritten by any port indication in the URL specified as <host>:<port> If it is a multihomed host then HTDoConnect measures the time to do the connection and updates the calculated weights in the cache of visited hosts.
extern int HTDoConnect PARAMS((	HTNetInfo  	*net,
				char		*url,
			     	u_short		default_port,
			    	u_long 		*addr,
				BOOL		use_cur));

Caching Hosts Names

This part of the HTTCP module maintains a cache of all visited hosts so that subsequent connects to the same host doesn't imply a new request to the DNS every time.

Multihomed hosts are treated specially in that the time spend on every connect is measured and kept in the cache. On the next request to the same host, the IP-address with the lowest average connect time is chosen. If one IP-address fails completely, e.g. connection refused then it disabled and HTDoConnect tries one of the other IP-addresses to the same host.

If the connect fails in the case of at single-homed host then the entry is removed from the cache and HTDoConnect tries again asking the DNS.

Recalculating the Time-Weights on Multihomed Hosts

On every connect to a multihomed host, the average connect time is updated exponentially for all the entries.
extern void TCPAddrWeights PARAMS((char * host, time_t deltatime));

Cleanup the Memory

This function is called from HTLibTerminate.
extern void TCPCacheRemoveAll NOPARAMS;

Control Variables

This parameter determines the maximum number of hosts in the cache. The default number is 500.
extern unsigned int	ConCacheSize;

System Description of Error Message

Return error message corresponding to errno number given. We need to pass the error number as a parameter as we on some platforms get different codes from sockets and local file access.
extern CONST char * HTErrnoString PARAMS((int errornumber));

Internet Name Server Functions

The following functions are available to get information about a specified host.

Produce a string for an internet address

This function is equivalent to the BSD system call inet_ntoa in that it converts a numeric 32-bit IP-address to a dotted-notation decimal string. The pointer returned points to static memory which must be copied if it is to be kept.
extern CONST char * HTInetString PARAMS((struct sockaddr_in * sin));

Parse an internet node address and port

This function finds the address of a specified host and fills out the sockaddr structure. str points to a string with a node name or number, with optional trailing colon and port number. sin points to the binary internet or decnet address field.

On exit *sin is filled in. If no port is specified in str, that field is left unchanged in *sin. On success, the number of homes on the host is returned.

extern int HTParseInet PARAMS((	struct sockaddr_in *	sin,
			       	CONST char *		str,
				BOOL			use_cur));

Host address retuned for specified host name

This function gets the address of the host and puts it in to the socket structure. It maintains its own cache of connections so that the communication to the Domain Name Server is minimized. If OK and single homed host then it returns 0 but if it is a multi-homed host then 1 is returned.
extern int HTGetHostByName PARAMS((char *host, SockA *sin, BOOL use_cur));
#endif   /* HTTCP_H */
End of file