d — Inferno 1ed
d
include "sys.m";
sys:= load Sys Sys->PATH;
Connection: adt
{
dfd: ref FD; # data file
cfd: ref FD; # control file
dir: string; # pathname of line directory
};
announce: fn(addr: string): (int, Connection);
dial: fn(addr, local: string): (int, Connection);
listen: fn(c: Connection): (int, Connection);
export: fn(fd: ref FD, flag: int): int;
Description
These routines establish network connections.
dial (addr, local)
The dial function establishes a connection to destination addr.
The addr Argument
The address must be of the form:network!destination!serviceport
For more information about the structure of this address, see Request Format in Chapter 6
The Connection Server
If the connection server is running, the dial function will pass addr to that daemon for the translation of host names, symbolic service names, and so on, to addresses of the designated network (the first component). See cs - connection server daemon for description of the supported conversion.
If the connection server daemon is not running, the dial function silently skips the translation stage and attempts to open a network connection with addr as received.
- A directory named in an optional prefix to the addr argument. The format in such cases is: /dir/network!destination!serviceport
- The /net directory
- The /net.alt directory. If the connection server returns several network addresses for the named destination, the dial function tries each in the order received until a connection is made.
The local Argument
If the network allows the local address to be set, and local is non-empty, the local address will be set to local. For IP, local addresses correspond to the port number.At the completion of dial, local can be read from the local file of the network interface.
The Return Values
The dial function returns a tuple consisting of an integer and a Connection adt.On failure, the dial function returns -1 in the integer portion of the tuple.
On success, the members of the returned Connection adt have been initialized to the following values:
See the appropriate Network device pages (for example, ip - TCP, UDP network protocols over IP in Chapter 2) for further details of using this interface.
announce (addr)
The announce function and the listen function described in this section are the complements of the dial function. Their actions allow completion of connection requests from clients using the dial function. The Argument, addr
The announce function establishes a network name (service port) to which incoming calls can be made. The format of the addr, the single argument is: The Connection Server
The announce function uses the connection server to translate any symbolic components of the argument to values acceptable to the network. See the cs daemon for a description of the supported translations.
- A directory named in an optional prefix to the addr argument. The format in such cases is: /dir/network!*!serviceport
- The /net directory
The Return Value
The return value of the announce function follows the same conventions as used by the dial function. If the call succeeds, the returned Connection adt can be used as an argument to the listen function.
listen(c)
The listen function allows the completion of a connection to a process calling the dial function.
Argument
The listen function takes as its only argument the Connection adt of a successful call to announce.
Return Values
The return values from the listen function have the same form as those returned from the dial function.When a call is received, listen includes an open Connection adt that leads to a network interface file. The data file of that interface is cross connected (read-to-write and write-to-read) to the data file associated with the Connection adt returned by the dial function to the client process.
export (fd, flag)
The export function responds to client requests for file operations on the server's file name space. This is the server end of a client's mount call.
NOTE:
Requests for pathname resolution occur relative to the current root directory of the process calling export. That process can control the set of files available for mounts requests by clients by defining the root directory of its name space using the operations described on the bind page.
Arguments
The export functions first argument is the dfd member of a Connection returned from listen on service port stags.The export function can take two mutually exclusive flags
|
EXPWAIT
|
The export function blocks until all client requests are complete.
|
|
EXPASYNC
|
Client requests are handled by a background thread, while export returns immediately
|
Return Values
The export function returns 0 on success and -1 on failure. Examples
Make a call and return an open file descriptor to use for communications:
callkremvax( ): (int, Connection)
{
return sys->dial("tcp!kremvax!mpeg", nil);
}
Call the local authentication server:dialauth(service: string): (int, Connection) { return sys->dial("net!$SIGNER!inflogin", nil); }
See Also
|
bind, mount, unmount - change file name space
|
|
cs - connection server daemon in Chapter 6
|
infernosupport@lucent.com Copyright © 1996,Lucent Technologies, Inc. All rights reserved.