home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD2.bin
/
bbs
/
comm
/
amitcp-3.0ß2.lha
/
AmiTCP
/
src
/
netlib
/
init_inet_daemon.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-04-13
|
2KB
|
93 lines
RCS_ID_C="$Id: init_inet_daemon.c,v 1.2 1994/04/12 22:04:15 jraja Exp $";
/*
* init_inet_daemon.c - obtain socket accepted by the inetd
*
* Author: jraja <Jarno.Rajahalme@hut.fi>
*
* Copyright © 1994 AmiTCP/IP Group, <amitcp-group@hut.fi>
* Helsinki University of Technology, Finland.
* All rights reserved.
*
* Created :
* Last modified:
*/
/****** 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.
AUTHOR
Jarno Rajahalme, Pekka Pessi,
the AmiTCP/IP Group <amitcp-group@hut.fi>,
Helsinki University of Technology, Finland.
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;
}