[net.unix-wizards] Fifo files on 4.2?

ted@usceast.UUCP (Ted Nolan) (04/30/85)

Does anyone have a (preferably user level) way to implement sys5 type
fifo files on 4.2 bsd?  If I understand the concept correctly, this would
be exactly what I have wanted at many different times (as well as now).

It seems that it could be done somehow with sockets, but I freely admit that
I haven't had to understand them yet and don't.

				Thanks
				Ted Nolan	..usceast!ted
-- 
-------------------------------------------------------------------------------
Ted Nolan                   ...decvax!mcnc!ncsu!ncrcae!usceast!ted  (UUCP)
6536 Brookside Circle       ...akgua!usceast!ted
Columbia, SC 29206          allegra!usceast!ted@seismo (ARPA, maybe)

      ("Deep space is my dwelling place, the stars my destination")
-------------------------------------------------------------------------------

gwyn@brl-tgr.ARPA (Doug Gwyn <gwyn>) (05/02/85)

> Does anyone have a (preferably user level) way to implement sys5 type
> fifo files on 4.2 bsd?  If I understand the concept correctly, this would
> be exactly what I have wanted at many different times (as well as now).
> 
> It seems that it could be done somehow with sockets, but I freely admit that
> I haven't had to understand them yet and don't.

I once looked at this and decided that sockets would not suffice.
For one thing, FIFO inodes are stored in the file system so they
persist across reboots.  For another, the 4.2BSD UNIX domain socket
code was so buggy that one endangers his system by trying to use it.

Fortunately, the S_IFIFO bit pattern has not been usurped by Berkeley
yet, so FIFOs could be added to the 4.nBSD kernel without disrupting
things.  (It would be nice if pipes were put back at the same time.)

ron@BRL (Ron Natalie) (05/02/85)

>  For another, the 4.2BSD UNIX domain socket
>  code was so buggy that one endangers his system by trying to use it.

Ah, jeez Doug.  For someone who is is always bitching at people who send
bug reports out for problems that have been fixed in the latest version
of the code, you should have realized that we have actually fixed the
problem with the so-called "UNIX IPC" a long time ago.

I do admit you are right, Berkeley broke some of the pipe conventions
when they switched them over to being sockets such that code no longer
works.  In addition, I could do FIFO's with the BRL socket inode code,
but it would be extrordinarily messy.  I would suggest that anyone
who really needs them actually implement them.

-Ron

chris@umcp-cs.UUCP (Chris Torek) (05/02/85)

> From: gwyn@brl-tgr.ARPA (Doug Gwyn <gwyn>)

> For another, the 4.2BSD UNIX domain socket code was so buggy that one
> endangers his system by trying to use it.

Only the SOCK_DGRAM code!  Pipes are SOCK_STREAM socketpairs (well,
sort of), and only break if you run out of mbufs (but then exit()
panics if you run out of mbufs, so why worry about the sockets?).
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 4251)
UUCP:	{seismo,allegra,brl-bmd}!umcp-cs!chris
CSNet:	chris@umcp-cs		ARPA:	chris@maryland

gwyn@Brl.ARPA (VLD/VMB) (05/02/85)

Although BRL 4.nBSD has fixed the UNIX domain sockets,
that doesn't mean that all 4.2BSD sites have.  I thought
a warning was in order.

ron@BRL (Ron Natalie) (05/03/85)

The fixes are on the bug lists.

john@genrad.UUCP (John Nelson) (05/03/85)

>> For another, the 4.2BSD UNIX domain socket code was so buggy that one
>> endangers his system by trying to use it.
>
>Only the SOCK_DGRAM code!  Pipes are SOCK_STREAM socketpairs (well,
>sort of), and only break if you run out of mbufs (but then exit()
>panics if you run out of mbufs, so why worry about the sockets?).

I hate to disallusion anyone, but SOCK_STREAM is as buggy as SOCK_DGRAM.
Whatever you do, DONT USE OUT OF BAND DATA!   It will crash the system.

I also have a program which crashes both ULTRIX and BSD4.2 as distributed:
it calls send and recv on a connected socket pair in SOCK_STREAM.  (Actually,
it calls send and recv with a missing flags argument - nevertheless, it shouldnt
crash the kernel!)