KEYRING-GETMSG(2)                               KEYRING-GETMSG(2)

     NAME
          keyring: getmsg, sendmsg, senderrmsg - send and receive
          messages on undelimited streams

     SYNOPSIS
          include "keyring.m";
          keyring := load Keyring Keyring->PATH;

          getmsg:  fn(fd: ref Sys->FD): array of byte;
          sendmsg: fn(fd: ref Sys->FD, buf: array of byte, n: int): int;
          senderrmsg: fn(fd: ref Sys->FD, s: string): int;

     DESCRIPTION
          These functions allow arbitrary data, packed into arrays of
          bytes, to be exchanged on network connections using
          connection-oriented transport protocols that do not preserve
          record boundaries (eg, TCP/IP without ssl(3)). They are used
          to implement various authentication protocols, including
          auth(6), as implemented by keyring-auth(2).

          Each data message is transmitted with a five-byte header
          containing a four-character zero-padded decimal count n ter-
          minated by a newline, followed by n bytes of message data.
          An error message has a similar structure, except that the
          first character of the count is replaced by an exclamation
          mark (!); the message data following contains the diagnostic
          string in its UTF-8 encoding (see utf(6)).

          Getmsg reads the next message from fd and returns its data
          content.

          Sendmsg sends the first n bytes of buf as a message on fd,
          and returns n.

          Senderrmsg sends the error message s.

     SOURCE
          /libinterp/keyring.c

     DIAGNOSTICS
          Sendmsg and senderrmsg return -1 if there was an error writ-
          ing to fd; they set the system error string.  Getmsg returns
          nil if there was an error reading from fd; it sets the sys-
          tem error string to reflect the cause.  It also returns nil
          if an error message was received instead of a data message;
          the system error string will contain the error message's
          diagnostic.

     Page 1                       Plan 9             (printed 4/20/24)