[comp.unix.questions] SysV

Sean.Levy@CS.CMU.EDU (11/02/90)

Under BSD and all the BSDalikes we have at our disposal, the following
scheme works:

{
	s = socket(...);
	...
	signal(SIGIO, handler);
	fcntl(s, F_SETOWN, getpid());
	go_do_my_thang();
	...
}

handler()
{
	c = accept(s, ...);
	...
}

Well, you get the idea. The point is, the code works just fine under
Mach/BSD, Ultrix, other BSDish systems; a SIGIO interrupt is delivered
whenever someone does a connect() to s. However, on the ARDENT under
whatever perverted SysV + BSD sugar thing they run there, no interrupt
is delivered when a connect() is done -- nothing happens at all, as a
matter of fact. SIGIO does seem to work for actual I/O, e.g. if you set
it up in an analagous way and use SIGIO to be notified of write()'s on
the socket, it does work. This also works in BSD, of course.

So, my question is: can you use SIGIO under ARDENT's (or anyone else's)
SysV to be notified of an attempt to connect to a socket? The point is
to have this piece of code be portable to a number of platforms, and
also be operable in a heterogenous environment, e.g. a purely SysV
solution to this is no good. I thought that a more generic way of doing
this would be to fork a process that sits on the socket in accept(),
accepts connections and shuffles I/O to its parent (maybe using SIGIO in
the parent to be notified of I/O, since this seems to work).

Thanks in advance,
		--S

sean levy, edrc, cmu, pittsburgh, pa. snl+@cs.cmu.edu 412 268 2257
               don't believe the hype