HPUX ipcrecv[2]






 ipcrecv(2)                                                       ipcrecv(2)





 NAME
      ipcrecv - establish an NetIPC virtual circuit connection or receive
      data on an established connection

 SYNOPSIS
      #include <sys/ns_ipc.h>

      void ipcrecv(
           ns_int_t vcdesc,
           void *data,
           ns_int_t *dlen,
           ns_int_t *flags,
           short opt[],
           ns_int_t *result);

 DESCRIPTION
      ipcrecv() serves two purposes:

           o  Establish a virtual circuit connection that was initiated with
              ipcconnect() (see ipcconnect(2)),

           o  Receive data on a previously established virtual circuit
              connection.

      After a program calls ipcconnect(), it must call ipcrecv() to complete
      the connection.  When ipcrecv() is called to finish establishing a
      connection, no data is returned in the data parameter and the dlen
      parameter is ignored.  An exception ipcselect() (see ipcselect(2)) can
      be performed to determine whether connections are pending on a call
      socket.

      When ipcrecv() is called to receive data queued on a established
      connection, several different alternatives are available:

           o  Normal reading: Data is moved from the connection queue into
              the user's buffer.

           o  Preview reading: This alternative is specified by setting the
              NSF_PREVIEW bit (bit 30) of the flags parameter.  When this
              bit is set, data is copied into the process's buffer, but
              still remains in the connection queue.  Consequently, the next
              ipcrecv() call reads the same data.

           o  Vectored or "scattered" reading: The calling process can pass
              a data vector argument that describes one or more locations.
              Received data is then placed into these locations.  This
              alternative can be used with both the normal and the preview
              read described above, and is specified by setting the
              NSF_VECTORED bit (bit 31) of the flags parameter.





 Hewlett-Packard Company            - 1 -     HP-UX Release 9.0: August 1992






 ipcrecv(2)                                                       ipcrecv(2)





      For vectored reads an iovec structure contains the data vector.  An
      iovec structure can be defined as:

           struct iovec {
                char       *iov_base;
                unsigned   iov_len;
           };

      and the normal type for the data argument can be replaced by:

           struct iovec *data;

      Each iovec entry specifies the base address and length of an area in
      memory where data should be placed.  ipcrecv() always fills one area
      completely before proceeding to the next area.

      ipcrecv() behavior varies, depending on whether the socket referenced
      is in synchronous or asynchronous mode.  A socket is in synchronous
      mode by default.  It can be placed in asynchronous mode by calling
      ipccontrol() (see ipccontrol(2)).  By default, calls that block reach
      their timeout limit in 60 seconds.  The length of the timeout period
      can be changed by calling ipccontrol().  Refer to ipccontrol(2) for
      more information.

      If the socket referenced by ipcrecv() is in synchronous mode and no
      data is queued on the connection, the call blocks until data arrives
      or the socket timer expires.

      If the socket referenced by ipcrecv() is in asynchronous mode and no
      data is queued on the connection, NSR_WOULD_BLOCK is returned in the
      result parameter.

    Parameters
      vcdesc              (input parameter) "virtual circuit" socket
                          descriptor.  Refers to a socket that:

                               o  Is the endpoint of a virtual circuit
                                  connection that has not yet been
                                  established, or

                               o  Is the endpoint of an established virtual
                                  circuit on which data will be received.

      data                (output parameter) A pointer to a data buffer for
                          holding the received data, or a pointer to an
                          array of data vectors describing the locations
                          where the data is to be placed.

      dlen                (input/output parameter) If data is a data buffer,
                          dlen is the maximum number of bytes that can be
                          received.  If data is a data vector, dlen refers



 Hewlett-Packard Company            - 2 -     HP-UX Release 9.0: August 1992






 ipcrecv(2)                                                       ipcrecv(2)





                          to the length of the data vector in bytes.  As a
                          return parameter, dlen indicates how many bytes
                          were actually received.  If ipcrecv() is used to
                          establish a connection (not to receive data), dlen
                          is meaningless on input and a value of zero (0) is
                          returned on output.

      flags               (input/output parameter) See below.

      opt                 (input parameter) A pointer to a NetIPC options
                          buffer.  See below.

      result              (output parameter) The error code returned.  Refer
                          to ERRORS below for more information.

    Flags Parameter
      Flags are only valid on an established connection.

           NSF_DATA_WAIT (bit 20)   (input parameter) This flag exists for
                                    backward compatibility.  Existing
                                    programs that use this flag may suffer
                                    performance degradation due to network
                                    congestion avoidance algorithms in the
                                    networking protocol code.  This flag
                                    should be removed from those programs.

           NSF_MORE_DATA (bit 26)   (output parameter) This bit is always
                                    set for backwards compatibility.

           NSF_PREVIEW (bit 30)     (input parameter) When this bit is set,
                                    data queued on the connection may be
                                    previewed.  Data is placed in the data
                                    parameter but not removed from the
                                    connection queue.  Since the data
                                    remains in the queue, the next ipcrecv()
                                    call reads the same data.

           NSF_VECTORED (bit 31)    (input parameter) When set, this bit
                                    indicates that data is a data vector and
                                    not a data buffer.

    Opt Parameter
      Options are only valid when ipcrecv() is issued against an established
      connection.

           NSO_DATA_OFFSET          (optioncode = 8) (datalength = 2) A
                                    two-byte integer that defines a byte
                                    offset from the beginning of a data
                                    buffer where NetIPC is to begin placing
                                    data.  This option is valid only if data
                                    is a data buffer and not a data vector.



 Hewlett-Packard Company            - 3 -     HP-UX Release 9.0: August 1992






 ipcrecv(2)                                                       ipcrecv(2)





 RETURN VALUE
      None.  Errors are returned in the result parameter.

 ERRORS
      [NSR_BOUNDS_VIO]              A length or offset value in the opt
                                    parameter is illegal, or one of the
                                    pointer arguments is invalid.

      [NSR_DESC]                    The vcdesc argument is not a valid
                                    socket descriptor

      [NSR_DLEN]                    The specified dlen parameter is invalid.

      [NSR_DUP_OPTION]              A particular option is defined more than
                                    once in the opt parameter.

      [NSR_MESSAGE_SIZE]            The value in the dlen exceeds the
                                    maximum limit for this socket.  The
                                    default maximum is 100 bytes.  You can
                                    use ipccontrol() to alter this value.

      [NSR_NO_ERROR]                The call was successful.

      [NSR_NOT_CONNECTION]          The vcdesc parameter did not reference a
                                    VC socket.

      [NSR_OPT_OPTION]              An option specified in the opt parameter
                                    is unknown or unsupported.

      [NSR_OPT_SYNTAX]              A length or offset value in the opt
                                    parameter is invalid.

      [NSR_REMOTE_ABORT]            The connection was aborted due to an
                                    action by the peer.

      [NSR_REMOTE_RELEASED]         The connection was released due to
                                    action by the peer.

      [NSR_SIGNAL_INDICATION]       The call aborted due to a signal
                                    received.

      [NSR_SOCKET_TIMEOUT]          The socket timer expired:

                                         o  Before the connection completed
                                            (first call to ipcrecv() and the
                                            socket is in synchronous mode),

                                         o  Before any data arrived
                                            (connection established, socket
                                            in synchronous mode,
                                            NSF_DATA_WAIT flag not set), or



 Hewlett-Packard Company            - 4 -     HP-UX Release 9.0: August 1992






 ipcrecv(2)                                                       ipcrecv(2)





                                         o  Before the requested amount of
                                            data arrived (connection
                                            established, socket in
                                            synchronous mode, NSR_DATA_WAIT
                                            flag set).

      [NSR_TOO_MANY_VECTS]          The number of data vectors exceeds the
                                    maximum limit of 16.

      [NSR_VECT_COUNT]              A negative data length was specified in
                                    the iovec.

      [NSR_WOULD_BLOCK]             The connection is still pending; the
                                    data present is less than requested, the
                                    socket in asynchronous mode, and the
                                    NSF_DATA_WAIT flag is set; or no data is
                                    present, and the socket is in
                                    asynchronous mode with the NSF_DATA_WAIT
                                    flag not set.

 AUTHOR
      ipcrecv() was developed by HP.

 SEE ALSO
      ipcconnect(2), ipccontrol(2), ipccreate(2), ipcdest(2),
      ipcgetnodename(2), ipclookup(2), ipcname(2), ipcnamerase(2),
      ipcrecvcn(2), ipcselect(2), ipcsend(2), ipcsetnodename(2),
      ipcshutdown(2), addopt(3N), initopt(3N), ipcerrmsg(3N),
      optoverhead(3N), readopt(3N).

























 Hewlett-Packard Company            - 5 -     HP-UX Release 9.0: August 1992