#define MAXARGV 5
struct	servtab {
	char	*se_service;		/* name of service */
	int	se_socktype;		/* type of socket to use */
	char	*se_proto;		/* protocol used */
	short	se_wait;		/* single threaded server */
	short	se_checked;		/* looked at during merge */
	char	*se_user;		/* user name to run as */
	struct	biltin *se_bi;		/* if built-in, description */
	char	*se_server;		/* server program */
	char	*se_argv[MAXARGV+1];	/* program arguments */
	int	se_fd;			/* open descriptor */
	struct	sockaddr_in se_ctrladdr;/* bound address */
	int	se_count;		/* number started since se_time */
	struct	timeval se_time;	/* start of se_count */
	struct	servtab *se_next;
} *servtab;

int	echo_dg(), discard_dg(), machtime_stream(), machtime_dg(),
	daytime_stream(), daytime_dg(), chargen_dg();

struct biltin {
	char	*bi_service;		/* internally provided service name */
	int	bi_socktype;		/* type of socket supported */
	int	(*bi_func)();		/* function serving */
} biltins[] = {
	"echo",		SOCK_DGRAM,	echo_dg,
	"discard",	SOCK_DGRAM,	discard_dg,
	"time",		SOCK_STREAM,	machtime_stream,
	"time",		SOCK_DGRAM,	machtime_dg,
	"daytime",	SOCK_STREAM,	daytime_stream,
	"daytime",	SOCK_DGRAM,	daytime_dg,
	"chargen",	SOCK_DGRAM,	chargen_dg,
	0
};

