[comp.unix.questions] Sockets/STREAMS/TLI ?

ma@inmet.inmet.com (07/27/90)

I am building an application which needs to do RPC-like processing
across a SUN network, but I cannot use SUN's rpc facility itself;
I need to build mine from lower-level components.

The question is, WHICH set of lower-level components should I use?  I
gather that the underlying mechanism for SUN's rpc facility is
sockets, so that would be an obvious choice.  However, the SUN 4.1
documentation (in particular the Network Programming Guide) alludes to
the fact that SUN intends to ultimately discontinue support for
sockets, and warns the user to not use them directly for new software.

If that were true, what should one use instead?  The impression I
get from that very same Guide is that the answer is TLI.  However,
TLI is NOT available on pre-4.1 releases.  Is there something on that
level that IS available both now and in the future?  What comes to
mind is STREAMS.  However, I find it hard to figure out whether
STREAMS provide the same functionality as sockets and/or TLI, how
those three differ from one another, what each of them is good or bad
for, whether any of them are implemented in terms of the others, etc, etc...

I would very much appreciate an explanation of all of this, and some
advice about which of them to use.

Thanks in advance,

Malgosia Askanas (ma@inmet.inmet.com)

guy@auspex.auspex.com (Guy Harris) (07/29/90)

>The question is, WHICH set of lower-level components should I use?  I
>gather that the underlying mechanism for SUN's rpc facility is
>sockets, so that would be an obvious choice.

Correct, in SunOS (modulo the non-existence of a major workstation
vendor named SUN; it's "Sun Microsystems", not "SUN Microsystems").

>However, the SUN 4.1 documentation (in particular the Network
>Programming Guide) alludes to the fact that SUN intends to ultimately
>discontinue support for sockets, and warns the user to not use them
>directly for new software.

What this means is that the next major OS release from Sun will be based
on System V Release 4, and the "native" networking interface in S5R4 is
TLI.  However, S5R4 will have a sockets interface, at least to the
Internet protocol family, as well.

>If that were true, what should one use instead?  The impression I
>get from that very same Guide is that the answer is TLI.  However,
>TLI is NOT available on pre-4.1 releases.  Is there something on that
>level that IS available both now and in the future?

No.

>What comes to mind is STREAMS.  However, I find it hard to figure out whether
>STREAMS provide the same functionality as sockets and/or TLI,

That's because it ultimately doesn't.  Sockets provides the same
functionality as STREAMS+TLI.  TLI is built atop STREAMS; some of the
functionality provided by sockets is mirrored by STREAMS functionality,
and other functionality is mirrored by TLI functionality.

Prior to SunOS 4.1, the only networking functionality implemented using
STREAMS is NIT (unless you count the tty driver).  Prior to SunOS 4.0,
you don't have STREAMS anyway.

I would probably go with sockets for now, if I were concerned about
maximum portability.  Just about every UNIX system that offers the
Internet protocol family has them (I think most TCP/IP packages for S5R3
come with a socket emulation library; TCP/IP implementations atop S5R2
and the like tended to be done with sockets; S5R4 comes standard with a
sockets library, and any UNIX system with a BSD-based networking
implementation has sockets).

brnstnd@kramden.acf.nyu.edu (Dan Bernstein) (07/29/90)

In article <36200002@inmet> ma@inmet.inmet.com writes:
> I am building an application which needs to do RPC-like processing
> across a SUN network, but I cannot use SUN's rpc facility itself;
> I need to build mine from lower-level components.
> 
> The question is, WHICH set of lower-level components should I use?

(Bias alert.) The answer is, my auth package (c.s.unix volume 22). As
the README says:

  This package provides two benefits. The first is a secure user-level
  implementation of RFC 931, the Authentication Server; unless TCP itself
  is compromised, it is impossible to forge mail or news between computers
  supporting RFC 931. The second is a single, modular interface to TCP.
  Programs written to work with authtcp and attachport don't even need to
  be recompiled to run under a more comprehensive network security system
  like Kerberos, as long the auth package is replaced.

You should have no trouble compiling and running auth on any Sun. Not
only will you get the authentication of RFC 931 now, but your programs
will be perfectly portable to any system supporting the straightforward
interface. auth could be implemented on top of TLI, for example.

Warning: auth only provides a modular interface for two-party stream
communication. If you need multi-party or datagram communication, you'll
have to do some extra work.

---Dan