dial man page on Inferno

Man page or keyword search:  
man Server   579 pages
apropos Keyword Search (all sections)
Output format
Inferno logo
[printable version]

DIAL(2)								       DIAL(2)

NAME
       Dial: accept, announce, dial, listen, netinfo, netmkaddr, reject - make
       network connections

SYNOPSIS
       include "dial.m";
       dial := load Dial Dial->PATH;

       Connection: adt
       {
	   dfd:	 ref FD;  # data file
	   cfd:	 ref FD;  # control file
	   dir:	 string;  # pathname of line directory
       };

       announce:  fn(addr: string):	   ref Connection;
       dial:	  fn(addr, local: string): ref Connection;
       listen:	  fn(c: ref Connection):       ref Connection;
       accept:	  fn(c: ref Connection): ref Sys->FD;
       reject:	  fn(c: ref Connection, why: string);

       netmkaddr: fn(addr, defnet, defsvc: string): string;

       Conninfo: adt
       {
	   dir:	  string;   # connection directory
	   root:  string;   # network mount point
	   spec:  string;   # its binding spec
	   lsys:  string;   # local host address
	   lserv: string;   # local service
	   rsys:  string;   # remote host address
	   rserv: string;   # remote service
	   laddr: string;   # local address in dial form
	   raddr: string;   # remote address in dial form
       };

       netinfo:	  fn(c: ref Connection): ref Conninfo;

DESCRIPTION
       Dial establishes network connections.  The description below  uses  the
       following definitions:

       addr   is a network address in one of the following forms:

	      network!netaddr!service
	      network!netaddr
	      netaddr

       network
	      Any  directory  listed  in /net (eg, tcp), or the special token,
	      net.  The special name net stands for any network that  connects
	      the current host and netaddr.  A network name can be preceded by
	      the full path name of a directory of networks,  using  the  form
	      /dir/network (eg, /net.alt/tcp).

       netaddr
	      A host name, a domain name, a network address, or a meta-name of
	      the form $attribute, which is replaced by value from the	corre‐
	      sponding attribute-value pair in the connection server data base
	      (see db(6)).

       The functions dial and announce translate a given  addr	to  an	actual
       network	address	 using the connection server cs(8).  If a logical name
       addr corresponds to several network addresses, for instance if a desti‐
       nation machine has several interfaces, cs will return them all; dial or
       announce will try each in turn until one works.	In particular, if addr
       is  net,	 cs  will  return addresses on all networks that are common to
       source and destination.	The translation procedure  accesses  cs	 using
       its  interface  file  cs,  which	 is  sought  as	 follows: first, in an
       explicit directory /dir if one was given in  network;  second,  in  the
       standard	 directory  /net;  and finally in the directory /net.alt (dial
       only).  If the connection server cannot be found, the addr is used  as-
       is.

       If  a connection attempt is successful, the dir member of the resulting
       Connection will be the path name of a line directory that has files for
       accessing  the connection.  One line directory exists for each possible
       connection.  The data file in the line directory is opened  to  make  a
       connection,  and	 read and written to communicate with the destination.
       The ctl file in the line directory can be used to send commands to  the
       line.  See ip(3) for messages that can be written to the ctl file.  The
       last close of both data and ctl file will close	the  connection.   The
       remote file in the line directory contains the address called; the file
       local contains the local address assigned.

       The function dial calls destination addr on a multiplexed network.   If
       the connection server returns several possible locations for addr, dial
       tries each in turn, until a connection is made, or no  address  remains
       to be tried.  Dial returns a reference to a Connection value containing
       a string dir that names the conversation directory for the  connection,
       a  file	descriptor  dfd	 open for reading and writing the data file in
       that directory, and a file descriptor cfd open for reading and  writing
       the  directory's	 ctl  file.   If  local	 is non-empty, and the network
       allows the local address to be set, as is the case  with	 UDP  and  TCP
       port numbers, the local address will be set to local.

       Announce	 and listen are the complements of dial.  Announce establishes
       a network name to which incoming calls can be made.  In	addr,  netaddr
       gives  the  name	 or  address  of one of the local host's interfaces on
       which to listen for calls to the given service; it can be *  to	listen
       for calls on any interface on network.  Announce returns a reference to
       a Connection value in which only the cfd descriptor  is	open,  on  the
       control	file  representing the announcement.  Listen takes as its only
       argument a reference to the Connection returned by a successful call to
       announce.  When a call is received, listen returns a reference to a new
       Connection value that refers to	the  conversation  directory  for  the
       incoming	 call;	only  the  cfd	descriptor  is open.  That call can be
       accepted or rejected.  Use accept to obtain a file descriptor  for  the
       data  file  for	the  conversation.   Use reject to reject the incoming
       call; some networks will also tell the caller the reason why.

       Netmkaddr makes addr into a full network address, suitable for dial  or
       announce.   It  adds  the  default network defnet (usually "net") and a
       default service defsvc to the given addr	 as  required,	including  `!'
       separators, and returns the result.

       Given  a	 Connection,  netinfo  returns a reference to a Conninfo value
       that gives details about the connection and its network.

EXAMPLES
       Make a call and return an open file descriptor to  use  for  communica‐
       tions:

	      callkremvax(): ref Sys->FD
	      {
		   c := dial->dial("tcp!kremvax!80", nil);
		   if(c == nil)
			return nil;
		   return c.dfd;
	      }

       Call the local certificate signer:

	      dialsigner(service: string): ref Sys->FD
	      {
		   c := dial->dial("net!$SIGNER!inflogin", nil);
		   if(c == nil)
			return nil;
		   return c.dfd;
	      }

       Listen for incoming calls.

	      listener()
	      {
		   ac := dial->announce("tcp!*!9995");
		   if(ac == nil){
			sys->print("can't announce: %r\n");
			exit;
		   }
		   for(;;){
			lc := dial->listen(ac);
			if(lc == nil){
			     sys->print("listen: %r\n");
			     exit;
			}
			sys->print("incoming: %s\n", hd ctext(lc));
			spawn client(lc);
		   }
	      }

	      client(c: ref Connection)
	      {
		   dfd := dial->accept(c);
		   if(dfd == nil){
			sys->print("%s: can't accept: %r\n", c.dir);
			exit;
		   }
		   buf := array[Sys->ATOMICIO] of byte;
		   while((n := sys->read(dfd, buf, len buf)) > 0)
			sys->write(dfd, buf, n);
	      }

SOURCE
       /appl/lib/dial.b

DIAGNOSTICS
       The integer valued functions return 0 on success and -1 on error; func‐
       tions returning a reference return nil on error.	 In  those  cases  the
       system error string is set.

								       DIAL(2)
[top]

List of man pages available for Inferno

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net