// Copyright (c) 2001  David Muse
// See the file COPYING for more information

#include <rudiments/listener.h>
#include <rudiments/inetserversocket.h>
#include <rudiments/unixserversocket.h>
#include <rudiments/inetclientsocket.h>
#include <rudiments/unixclientsocket.h>
#include <rudiments/permissions.h>
#include <stdio.h>

#ifdef RUDIMENTS_NAMESPACE
using namespace rudiments;
#endif

int main(int argc, const char **argv) {

	inetserversocket	serversock;
	serversock.listen(NULL,10000,15);

	unixserversocket	handoffsock;
	handoffsock.listen("/tmp/handoff.socket",0000,15);

	listener	pool;
	pool.addFileDescriptor(&serversock);
	pool.addFileDescriptor(&handoffsock);

	inetclientsocket	*clientsock=NULL;
	unixclientsocket	*handoffclientsock=NULL;

	for (;;) {

		pool.waitForNonBlockingRead(-1,-1);
		filedescriptor	*fd=NULL;
		pool.getReadyList()->getDataByIndex(0,&fd);

		if (fd==&serversock) {
			clientsock=(inetclientsocket *)
					serversock.accept();
		} else if (fd==&handoffsock) {
			handoffclientsock=(unixclientsocket *)
						handoffsock.accept();
		} else {
			printf("error or timeout waiting...\n");
		}

		if (clientsock && handoffclientsock) {
			handoffclientsock->passFileDescriptor(
					clientsock->getFileDescriptor());
			delete clientsock;
			clientsock=NULL;
		}
	}
}


syntax highlighted by Code2HTML, v. 0.9.1