home *** CD-ROM | disk | FTP | other *** search
- RCS_ID_C="$Id: init_inet_daemon.c,v 4.2 1994/09/30 00:35:04 jraja Exp $";
- /*
- * init_inet_daemon.c - obtain socket accepted by the inetd
- *
- * Copyright © 1994 AmiTCP/IP Group,
- * Network Solutions Development Inc.
- * All rights reserved.
- */
-
- /****** net.lib/init_inet_daemon ****************************************
-
- NAME
- init_inet_daemon - obtain socket accepted by the inetd
-
- SYNOPSIS
- int init_inet_daemon(void);
-
- FUNCTION
- Obtain the server socket accepted by the inetd, the Internet
- super-server.
-
- RETURN VALUES
- socket descriptor if successful, -1 with specific error code
- on errno otherwise.
-
- ERRORS
- ENXIO - The process was not started by the inetd.
-
- NOTES
- If the process was started by the inetd, but the ObtainSocket()
- call fails, then this function exit()s with some specific exit
- code, so that inetd can clean up the unobtained socket.
-
- Use the net.lib function set_socket_stdio() to redirect stdio,
- stdout and stderr to the returned socket, if necessary.
-
- SEE ALSO
- serveraccept(), set_socket_stdio(), bsdsocket/ObtainSocket(),
- netutil/inetd
- *****************************************************************************
- *
- */
-
- #include <exec/types.h>
- #include <dos/dosextens.h>
-
- #include <proto/socket.h>
- #include <proto/exec.h>
-
- #include <stdlib.h>
- #include <errno.h>
- #include <inetd.h>
-
- int
- init_inet_daemon(void)
- {
- struct Process *me = (struct Process *)FindTask(NULL);
- struct DaemonMessage *dm = (struct DaemonMessage *)me->pr_ExitData;
- int sock;
-
- if (dm == NULL) {
- /*
- * No DaemonMessage, return error code
- */
- errno = ENXIO; /* "Device not configured" */
- return -1;
- }
-
- /*
- * Obtain the server socket
- */
- sock = ObtainSocket(dm->dm_Id, dm->dm_Family, dm->dm_Type, 0);
- if (sock < 0) {
- /*
- * If ObtainSocket fails we need to exit with this specific exit code
- * so that the inetd knows to clean things up
- */
- exit(DERR_OBTAIN);
- }
-
- return sock;
- }
-