Print this page
10596 Convert streamio(7I) to mandoc

Split Close
Expand all
Collapse all
          --- old/usr/src/man/man7i/streamio.7i
          +++ new/usr/src/man/man7i/streamio.7i
   1      -'\" te
        1 +.\" Copyright (c) 2017, Joyent, Inc.
   2    2  .\" Copyright (c) 2009, Sun Microsystems, Inc.  All Rights Reserved.
   3    3  .\" Copyright 1989 AT&T
   4      -.\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License. You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.
   5      -.\"  See the License for the specific language governing permissions and limitations under the License. When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with
   6      -.\" the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
   7      -.TH STREAMIO 7I "Apr 8, 2009"
   8      -.SH NAME
   9      -streamio \- STREAMS ioctl commands
  10      -.SH SYNOPSIS
  11      -.LP
  12      -.nf
  13      -#include <sys/types.h>
  14      -#include <stropts.h>
  15      -#include <sys/conf.h>
  16      -
  17      -\fBint\fR \fBioctl\fR(\fBint\fR \fIfildes\fR, \fBint\fR \fIcommand\fR, \fB\&... /*arg*/\fR);
  18      -.fi
  19      -
  20      -.SH DESCRIPTION
  21      -.sp
  22      -.LP
  23      -STREAMS (see \fBIntro\fR(3)) \fBioctl\fR commands are a subset of the
  24      -\fBioctl\fR(2) commands and perform a variety of control functions on streams.
  25      -.sp
  26      -.LP
  27      -The \fIfildes\fR argument is an open file descriptor that refers to a stream.
  28      -The \fIcommand\fR argument determines the control function to be performed as
  29      -described below. The \fIarg\fR argument represents additional information that
  30      -is needed by this command. The type of \fIarg\fR depends upon the command, but
        4 +.\" The contents of this file are subject to the terms of the
        5 +.\" Common Development and Distribution License (the "License").
        6 +.\" You may not use this file except in compliance with the License.
        7 +.\"
        8 +.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
        9 +.\" or http://www.opensolaris.org/os/licensing.
       10 +.\" See the License for the specific language governing permissions
       11 +.\" and limitations under the License.
       12 +.\"
       13 +.\" When distributing Covered Code, include this CDDL HEADER in each
       14 +.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
       15 +.\" If applicable, add the following below this CDDL HEADER, with the
       16 +.\" fields enclosed by brackets "[]" replaced with your own identifying
       17 +.\" information: Portions Copyright [yyyy] [name of copyright owner]
       18 +.Dd October 29, 2017
       19 +.Dt STREAMIO 7I
       20 +.Os
       21 +.Sh NAME
       22 +.Nm streamio
       23 +.Nd STREAMS ioctl commands
       24 +.Sh SYNOPSIS
       25 +.In sys/types.h
       26 +.In stropts.h
       27 +.In sys/conf.h
       28 +.Ft int
       29 +.Fo ioctl
       30 +.Fa "int fildes"
       31 +.Fa "int command"
       32 +.Fa "\&... /*arg*/"
       33 +.Fc
       34 +.Sh DESCRIPTION
       35 +STREAMS (see
       36 +.Xr Intro 3 )
       37 +.Fn ioctl
       38 +commands are a subset of the
       39 +.Xr ioctl 2
       40 +commands and perform a variety of control functions on streams.
       41 +.Pp
       42 +The
       43 +.Fa fildes
       44 +argument is an open file descriptor that refers to a stream.
       45 +The
       46 +.Fa command
       47 +argument determines the control function to be performed as
       48 +described below.
       49 +The
       50 +.Fa arg
       51 +argument represents additional information that
       52 +is needed by this command.
       53 +The type of
       54 +.Fa arg
       55 +depends upon the command, but
  31   56  it is generally an integer or a pointer to a command-specific data structure.
  32      -The \fIcommand\fR and \fIarg\fR arguments are interpreted by the STREAM head.
       57 +The
       58 +.Fa command
       59 +and
       60 +.Fa arg
       61 +arguments are interpreted by the STREAM head.
  33   62  Certain combinations of these arguments may be passed to a module or driver in
  34   63  the stream.
  35      -.sp
  36      -.LP
  37      -Since these STREAMS commands are \fBioctls\fR, they are subject to the errors
  38      -described in \fBioctl\fR(2). In addition to those errors, the call will fail
  39      -with \fBerrno\fR set to \fBEINVAL,\fR without processing a control function, if
  40      -the STREAM referenced by \fIfildes\fR is linked below a multiplexor, or if
  41      -\fIcommand\fR is not a valid value for a stream.
  42      -.sp
  43      -.LP
  44      -Also, as described in \fBioctl\fR(2), STREAMS modules and drivers can detect
  45      -errors. In this case, the module or driver sends an error message to the STREAM
  46      -head containing an error value. This causes subsequent calls to fail with
  47      -\fBerrno\fR set to this value.
  48      -.SH IOCTLS
  49      -.sp
  50      -.LP
  51      -The following \fBioctl\fR commands, with error values indicated, are applicable
  52      -to all STREAMS files:
  53      -.sp
  54      -.ne 2
  55      -.na
  56      -\fB\fBI_PUSH\fR\fR
  57      -.ad
  58      -.RS 15n
  59      -Pushes the module whose name is pointed to by \fIarg\fR onto the top of the
  60      -current stream, just below the STREAM head. If the STREAM is a pipe, the module
  61      -will be inserted between the stream heads of both ends of the pipe. It then
  62      -calls the open routine of the newly-pushed module. On failure, \fBerrno\fR is
  63      -set to one of the following values:
  64      -.sp
  65      -.ne 2
  66      -.na
  67      -\fB\fBEINVAL\fR\fR
  68      -.ad
  69      -.RS 11n
       64 +.Pp
       65 +Since these STREAMS commands are
       66 +.Sy ioctls ,
       67 +they are subject to the errors described in
       68 +.Xr ioctl 2 .
       69 +In addition to those errors, the call will fail
       70 +with
       71 +.Va errno
       72 +set to
       73 +.Er EINVAL ,
       74 +without processing a control function, if the STREAM referenced by
       75 +.Fa fildes
       76 +is linked below a multiplexor, or if
       77 +.Fa command
       78 +is not a valid value for a stream.
       79 +.Pp
       80 +Also, as described in
       81 +.Xr ioctl 2 ,
       82 +STREAMS modules and drivers can detect
       83 +errors.
       84 +In this case, the module or driver sends an error message to the STREAM
       85 +head containing an error value.
       86 +This causes subsequent calls to fail with
       87 +.Va errno
       88 +set to this value.
       89 +.Sh IOCTLS
       90 +The following
       91 +.Fn ioctl
       92 +commands, with error values indicated, are applicable to all STREAMS files:
       93 +.Bl -tag -width I_SETCLTIME
       94 +.It Dv I_PUSH
       95 +Pushes the module whose name is pointed to by
       96 +.Va arg
       97 +onto the top of the current stream, just below the STREAM head.
       98 +If the STREAM is a pipe, the module
       99 +will be inserted between the stream heads of both ends of the pipe.
      100 +It then calls the open routine of the newly-pushed module.
      101 +On failure,
      102 +.Va errno
      103 +is set to one of the following values:
      104 +.Bl -tag -width ENOTSUP
      105 +.It Er EINVAL
  70  106  Invalid module name.
  71      -.RE
  72      -
  73      -.sp
  74      -.ne 2
  75      -.na
  76      -\fB\fBEFAULT\fR\fR
  77      -.ad
  78      -.RS 11n
  79      -\fIarg\fR points outside the allocated address space.
  80      -.RE
  81      -
  82      -.sp
  83      -.ne 2
  84      -.na
  85      -\fB\fBENXIO\fR\fR
  86      -.ad
  87      -.RS 11n
      107 +.It Er EFAULT
      108 +.Va arg
      109 +points outside the allocated address space.
      110 +.It Er ENXIO
  88  111  Open routine of new module failed.
  89      -.RE
  90      -
  91      -.sp
  92      -.ne 2
  93      -.na
  94      -\fB\fBENXIO\fR\fR
  95      -.ad
  96      -.RS 11n
  97      -Hangup received on \fIfildes\fR.
  98      -.RE
  99      -
 100      -.sp
 101      -.ne 2
 102      -.na
 103      -\fB\fBENOTSUP\fR\fR
 104      -.ad
 105      -.RS 11n
      112 +.It Er ENXIO
      113 +Hangup received on
      114 +.Va fildes .
      115 +.It Er ENOTSUP
 106  116  Pushing a module is not supported on this stream.
 107      -.RE
 108      -
 109      -.RE
 110      -
 111      -.sp
 112      -.ne 2
 113      -.na
 114      -\fB\fBI_POP\fR\fR
 115      -.ad
 116      -.RS 15n
      117 +.El
      118 +.It Dv I_POP
 117  119  Removes the module just below the STREAM head of the STREAM pointed to by
 118      -\fIfildes\fR. To remove a module from a pipe requires that the module was
 119      -pushed on the side it is being removed from. \fIarg\fR should be  \fB0\fR in an
 120      -\fBI_POP\fR request. On failure, \fBerrno\fR is set to one of the following
 121      -values:
 122      -.sp
 123      -.ne 2
 124      -.na
 125      -\fB\fBEINVAL\fR\fR
 126      -.ad
 127      -.RS 11n
      120 +.Fa fildes .
      121 +To remove a module from a pipe requires that the module was
      122 +pushed on the side it is being removed from.
      123 +.Fa arg
      124 +should be
      125 +.Sy 0
      126 +in an
      127 +.Dv I_POP
      128 +request.
      129 +On failure,
      130 +.Va errno
      131 +is set to one of the following values:
      132 +.Bl -tag -width ENOTSUP
      133 +.It Er EINVAL
 128  134  No module present in the stream.
 129      -.RE
 130      -
 131      -.sp
 132      -.ne 2
 133      -.na
 134      -\fB\fBENXIO\fR\fR
 135      -.ad
 136      -.RS 11n
 137      -Hangup received on \fIfildes\fR.
 138      -.RE
 139      -
 140      -.sp
 141      -.ne 2
 142      -.na
 143      -\fB\fBEPERM\fR\fR
 144      -.ad
 145      -.RS 11n
      135 +.It Er ENXIO
      136 +Hangup received on
      137 +.Fa fildes .
      138 +.It Er EPERM
 146  139  Attempt to pop through an anchor by an unprivileged process.
 147      -.RE
 148      -
 149      -.sp
 150      -.ne 2
 151      -.na
 152      -\fB\fBENOTSUP\fR\fR
 153      -.ad
 154      -.RS 11n
      140 +.It Er ENOTSUP
 155  141  Removal is not supported.
 156      -.RE
 157      -
 158      -.RE
 159      -
 160      -.sp
 161      -.ne 2
 162      -.na
 163      -\fB\fBI_ANCHOR\fR\fR
 164      -.ad
 165      -.RS 15n
      142 +.El
      143 +.It Dv I_ANCHOR
 166  144  Positions the stream anchor to be at the stream's module directly below the
 167      -stream head. Once this has been done, only a privileged process may pop modules
 168      -below the anchor on the stream. \fIarg\fR must be \fB0\fR in an \fBI_ANCHOR\fR
 169      -request. On failure, \fBerrno\fR is set to the following value:
 170      -.sp
 171      -.ne 2
 172      -.na
 173      -\fB\fBEINVAL\fR\fR
 174      -.ad
 175      -.RS 10n
      145 +stream head.
      146 +Once this has been done, only a privileged process may pop modules
      147 +below the anchor on the stream.
      148 +.Va arg
      149 +must be
      150 +.Sy 0
      151 +in an
      152 +.Dv I_ANCHOR
      153 +request.
      154 +On failure,
      155 +.Va errno
      156 +is set to the following value:
      157 +.Bl -tag -width EINVAL
      158 +.It Er EINVAL
 176  159  Request to put an anchor on a pipe.
 177      -.RE
 178      -
 179      -.RE
 180      -
 181      -.sp
 182      -.ne 2
 183      -.na
 184      -\fB\fBI_LOOK\fR\fR
 185      -.ad
 186      -.RS 15n
      160 +.El
      161 +.It Dv I_LOOK
 187  162  Retrieves the name of the module just below the stream head of the stream
 188      -pointed to by \fIfildes\fR, and places it in a null terminated character string
 189      -pointed at by \fIarg\fR. The buffer pointed to by \fIarg\fR should be at least
 190      -\fBFMNAMESZ\fR+1 bytes long. This requires the declaration \fB#include
 191      -<sys/conf.h>\fR. On failure, \fBerrno\fR is set to one of the following values:
 192      -.sp
 193      -.ne 2
 194      -.na
 195      -\fB\fBEFAULT\fR\fR
 196      -.ad
 197      -.RS 10n
 198      -\fIarg\fR points outside the allocated address space.
 199      -.RE
 200      -
 201      -.sp
 202      -.ne 2
 203      -.na
 204      -\fB\fBEINVAL\fR\fR
 205      -.ad
 206      -.RS 10n
      163 +pointed to by
      164 +.Fa fildes ,
      165 +and places it in a null terminated character string
      166 +pointed at by
      167 +.Fa arg .
      168 +The buffer pointed to by
      169 +.Fa arg
      170 +should be at least
      171 +.Dv FMNAMESZ Ns +1
      172 +bytes long.
      173 +This requires the declaration
      174 +.Ql "#include <sys/conf.h>" .
      175 +On failure,
      176 +.Dv errno
      177 +is set to one of the following values:
      178 +.Bl -tag -width EFAULT
      179 +.It Er EFAULT
      180 +.Fa arg
      181 +points outside the allocated address space.
      182 +.It Er EINVAL
 207  183  No module present in stream.
 208      -.RE
 209      -
 210      -.RE
 211      -
 212      -.sp
 213      -.ne 2
 214      -.na
 215      -\fB\fBI_FLUSH\fR\fR
 216      -.ad
 217      -.RS 15n
      184 +.El
      185 +.It Dv I_FLUSH
 218  186  This request flushes all input and/or output queues, depending on the value of
 219      -\fIarg\fR. Legal \fIarg\fR values are:
 220      -.sp
 221      -.ne 2
 222      -.na
 223      -\fBFLUSHR\fR
 224      -.ad
 225      -.RS 11n
      187 +.Fa arg .
      188 +Legal
      189 +.Fa arg
      190 +values are:
      191 +.Bl -tag -width FLUSHRW
      192 +.It Dv FLUSHR
 226  193  Flush read queues.
 227      -.RE
 228      -
 229      -.sp
 230      -.ne 2
 231      -.na
 232      -\fBFLUSHW\fR
 233      -.ad
 234      -.RS 11n
      194 +.It Dv FLUSHW
 235  195  Flush write queues.
 236      -.RE
 237      -
 238      -.sp
 239      -.ne 2
 240      -.na
 241      -\fBFLUSHRW\fR
 242      -.ad
 243      -.RS 11n
      196 +.It Dv FLUSHRW
 244  197  Flush read and write queues.
 245      -.RE
 246      -
      198 +.El
      199 +.Pp
 247  200  If a pipe or FIFO does not have any modules pushed, the read queue of the
 248      -stream head on either end is flushed depending on the value of \fIarg\fR.
 249      -.sp
 250      -If \fBFLUSHR\fR is set and \fIfildes\fR is a pipe, the read queue for that end
 251      -of the pipe is flushed and the write queue for the other end is flushed. If
 252      -\fIfildes\fR is a FIFO, both queues are flushed.
 253      -.sp
 254      -If \fBFLUSHW\fR is set and \fIfildes\fR is a pipe and the other end of the pipe
      201 +stream head on either end is flushed depending on the value of
      202 +.Fa arg .
      203 +.Pp
      204 +If
      205 +.Dv FLUSHR
      206 +is set and
      207 +.Fa fildes
      208 +is a pipe, the read queue for that end
      209 +of the pipe is flushed and the write queue for the other end is flushed.
      210 +If
      211 +.Fa fildes
      212 +is a FIFO, both queues are flushed.
      213 +.Pp
      214 +If
      215 +.Dv FLUSHW
      216 +is set and
      217 +.Fa fildes
      218 +is a pipe and the other end of the pipe
 255  219  exists, the read queue for the other end of the pipe is flushed and the write
 256      -queue for this end is flushed. If \fIfildes\fR is a FIFO, both queues of the
      220 +queue for this end is flushed.
      221 +If
      222 +.Fa fildes
      223 +is a FIFO, both queues of the
 257  224  FIFO are flushed.
 258      -.sp
 259      -If \fBFLUSHRW\fR is set, all read queues are flushed, that is, the read queue
      225 +.Pp
      226 +If
      227 +.Dv FLUSHRW
      228 +is set, all read queues are flushed, that is, the read queue
 260  229  for the FIFO and the read queue on both ends of the pipe are flushed.
 261      -.sp
      230 +.Pp
 262  231  Correct flush handling of a pipe or FIFO with modules pushed is achieved via
 263      -the \fBpipemod\fR module.  This module should be the first module pushed onto a
      232 +the
      233 +.Sy pipemod
      234 +module.
      235 +This module should be the first module pushed onto a
 264  236  pipe so that it is at the midpoint of the pipe itself.
 265      -.sp
 266      -On failure, \fBerrno\fR is set to one of the following values:
 267      -.sp
 268      -.ne 2
 269      -.na
 270      -\fB\fBENOSR\fR\fR
 271      -.ad
 272      -.RS 10n
      237 +.Pp
      238 +On failure,
      239 +.Va errno
      240 +is set to one of the following values:
      241 +.Bl -tag -width EINVAL
      242 +.It Er ENOSR
 273  243  Unable to allocate buffers for flush message due to insufficient stream memory
 274  244  resources.
 275      -.RE
 276      -
 277      -.sp
 278      -.ne 2
 279      -.na
 280      -\fB\fBEINVAL\fR\fR
 281      -.ad
 282      -.RS 10n
 283      -Invalid \fIarg\fR value.
 284      -.RE
 285      -
 286      -.sp
 287      -.ne 2
 288      -.na
 289      -\fB\fBENXIO\fR\fR
 290      -.ad
 291      -.RS 10n
 292      -Hangup received on \fIfildes\fR.
 293      -.RE
 294      -
 295      -.RE
 296      -
 297      -.sp
 298      -.ne 2
 299      -.na
 300      -\fB\fBI_FLUSHBAND\fR\fR
 301      -.ad
 302      -.RS 15n
 303      -Flushes a particular band of messages. \fIarg\fR points to a \fBbandinfo\fR
      245 +.It Er EINVAL
      246 +Invalid
      247 +.Va arg
      248 +value.
      249 +.It Er ENXIO
      250 +Hangup received on
      251 +.Fa fildes .
      252 +.El
      253 +.It Dv I_FLUSHBAND
      254 +Flushes a particular band of messages.
      255 +.Fa arg
      256 +points to a
      257 +.Vt bandinfo
 304  258  structure that has the following members:
 305      -.sp
 306      -.in +2
 307      -.nf
      259 +.Bd -literal -offset 2n
 308  260  unsigned char bi_pri;
 309  261  int bi_flag;
 310      -.fi
 311      -.in -2
 312      -
 313      -The \fBbi_flag\fR field may be one of \fBFLUSHR\fR, \fBFLUSHW\fR, or
 314      -\fBFLUSHRW\fR as described earlier.
 315      -.RE
 316      -
 317      -.sp
 318      -.ne 2
 319      -.na
 320      -\fB\fBI_SETSIG\fR\fR
 321      -.ad
 322      -.RS 15n
      262 +.Ed
      263 +.Pp
      264 +The
      265 +.Fa bi_flag
      266 +field may be one of
      267 +.Dv FLUSHR ,
      268 +.Dv FLUSHW ,
      269 +or
      270 +.Dv FLUSHRW
      271 +as described earlier.
      272 +.It Dv I_SETSIG
 323  273  Informs the stream head that the user wishes the kernel to issue the
 324      -\fBSIGPOLL\fR signal (see \fBsignal\fR(3C)) when a particular event has
 325      -occurred on the stream associated with \fIfildes\fR. \fBI_SETSIG\fR supports an
 326      -asynchronous processing capability in streams. The value of \fIarg\fR is a
 327      -bitmask that specifies the events for which the user should be signaled. It is
 328      -the bitwise OR of any combination of the following constants:
 329      -.sp
 330      -.ne 2
 331      -.na
 332      -\fB\fBS_INPUT\fR\fR
 333      -.ad
 334      -.RS 13n
 335      -Any message other than an \fBM_PCPROTO\fR has arrived on a stream head read
 336      -queue. This event is maintained for compatibility with previous releases. This
 337      -event is triggered even if the message is of zero length.
 338      -.RE
 339      -
 340      -.sp
 341      -.ne 2
 342      -.na
 343      -\fB\fBS_RDNORM\fR\fR
 344      -.ad
 345      -.RS 13n
      274 +.Dv SIGPOLL
      275 +signal (see
      276 +.Xr signal 3C )
      277 +when a particular event has occurred on the stream associated with
      278 +.Fa fildes .
      279 +.Dv I_SETSIG
      280 +supports an asynchronous processing capability in streams.
      281 +The value of
      282 +.Fa arg
      283 +is a bitmask that specifies the events for which the user should be signaled.
      284 +It is the bitwise OR of any combination of the following constants:
      285 +.Bl -tag -width S_BANDURG
      286 +.It Dv S_INPUT
      287 +Any message other than an
      288 +.Dv M_PCPROTO
      289 +has arrived on a stream head read queue.
      290 +This event is maintained for compatibility with previous releases.
      291 +This event is triggered even if the message is of zero length.
      292 +.It Dv S_RDNORM
 346  293  An ordinary (non-priority) message has arrived on a stream head read queue.
 347  294  This event is triggered even if the message is of zero length.
 348      -.RE
 349      -
 350      -.sp
 351      -.ne 2
 352      -.na
 353      -\fB\fBS_RDBAND\fR\fR
 354      -.ad
 355      -.RS 13n
      295 +.It Dv S_RDBAND
 356  296  A priority band message (band > 0) has arrived on a stream head read queue.
 357  297  This event is triggered even if the message is of zero length.
 358      -.RE
 359      -
 360      -.sp
 361      -.ne 2
 362      -.na
 363      -\fB\fBS_HIPRI\fR\fR
 364      -.ad
 365      -.RS 13n
 366      -A high priority message is present on the stream head read queue. This event is
 367      -triggered even if the message is of zero length.
 368      -.RE
 369      -
 370      -.sp
 371      -.ne 2
 372      -.na
 373      -\fB\fBS_OUTPUT\fR\fR
 374      -.ad
 375      -.RS 13n
 376      -The write queue just below the stream head is no longer full. This notifies the
      298 +.It Dv S_HIPRI
      299 +A high priority message is present on the stream head read queue.
      300 +This event is triggered even if the message is of zero length.
      301 +.It Dv S_OUTPUT
      302 +The write queue just below the stream head is no longer full.
      303 +This notifies the
 377  304  user that there is room on the queue for sending (or writing) data downstream.
 378      -.RE
 379      -
 380      -.sp
 381      -.ne 2
 382      -.na
 383      -\fB\fBS_WRNORM\fR\fR
 384      -.ad
 385      -.RS 13n
 386      -This event is the same as \fBS_OUTPUT\fR.
 387      -.RE
 388      -
 389      -.sp
 390      -.ne 2
 391      -.na
 392      -\fB\fBS_WRBAND\fR\fR
 393      -.ad
 394      -.RS 13n
      305 +.It Dv S_WRNORM
      306 +This event is the same as
      307 +.Dv S_OUTPUT .
      308 +.It Dv S_WRBAND
 395  309  A priority band greater than 0 of a queue downstream exists and is writable.
 396  310  This notifies the user that there is room on the queue for sending (or writing)
 397  311  priority data downstream.
 398      -.RE
 399      -
 400      -.sp
 401      -.ne 2
 402      -.na
 403      -\fB\fBS_MSG\fR\fR
 404      -.ad
 405      -.RS 13n
 406      -A STREAMS signal message that contains the \fBSIGPOLL\fR signal has reached the
      312 +.It Dv S_MSG
      313 +A STREAMS signal message that contains the
      314 +.Dv SIGPOLL
      315 +signal has reached the
 407  316  front of the stream head read queue.
 408      -.RE
 409      -
 410      -.sp
 411      -.ne 2
 412      -.na
 413      -\fB\fBS_ERROR\fR\fR
 414      -.ad
 415      -.RS 13n
 416      -An \fBM_ERROR\fR message has reached the stream head.
 417      -.RE
 418      -
 419      -.sp
 420      -.ne 2
 421      -.na
 422      -\fB\fBS_HANGUP\fR\fR
 423      -.ad
 424      -.RS 13n
 425      -An \fBM_HANGUP\fR message has reached the stream head.
 426      -.RE
 427      -
 428      -.sp
 429      -.ne 2
 430      -.na
 431      -\fB\fBS_BANDURG\fR\fR
 432      -.ad
 433      -.RS 13n
 434      -When used in conjunction with \fBS_RDBAND\fR, \fBSIGURG\fR is generated instead
 435      -of \fBSIGPOLL\fR when a priority message reaches the front of the stream head
      317 +.It Dv S_ERROR
      318 +An
      319 +.Dv M_ERROR
      320 +message has reached the stream head.
      321 +.It Dv S_HANGUP
      322 +An
      323 +.Dv M_HANGUP
      324 +message has reached the stream head.
      325 +.It Dv S_BANDURG
      326 +When used in conjunction with
      327 +.Dv S_RDBAND ,
      328 +.Dv SIGURG
      329 +is generated instead of
      330 +.Dv SIGPOLL
      331 +when a priority message reaches the front of the stream head
 436  332  read queue.
 437      -.RE
 438      -
      333 +.El
      334 +.Pp
 439  335  A user process may choose to be signaled only of high priority messages by
 440      -setting the \fIarg\fR bitmask to the value \fBS_HIPRI\fR.
 441      -.sp
 442      -Processes that wish to receive \fBSIGPOLL\fR signals must explicitly register
 443      -to receive them using \fBI_SETSIG\fR. If several processes register to receive
      336 +setting the
      337 +.Fa arg
      338 +bitmask to the value
      339 +.Dv S_HIPRI .
      340 +.Pp
      341 +Processes that wish to receive
      342 +.Dv SIGPOLL
      343 +signals must explicitly register
      344 +to receive them using
      345 +.Dv I_SETSIG .
      346 +If several processes register to receive
 444  347  this signal for the same event on the same stream, each process will be
 445  348  signaled when the event occurs.
 446      -.sp
 447      -If the value of \fIarg\fR is zero, the calling process will be unregistered and
 448      -will not receive further \fBSIGPOLL\fR signals.  On failure, \fBerrno\fR is set
 449      -to one of the following values:
 450      -.sp
 451      -.ne 2
 452      -.na
 453      -\fB\fBEINVAL\fR\fR
 454      -.ad
 455      -.RS 10n
 456      -\fIarg\fR value is invalid or \fIarg\fR is zero and process is not registered
 457      -to receive the \fBSIGPOLL\fR signal.
 458      -.RE
 459      -
 460      -.sp
 461      -.ne 2
 462      -.na
 463      -\fB\fBEAGAIN\fR\fR
 464      -.ad
 465      -.RS 10n
      349 +.Pp
      350 +If the value of
      351 +.Fa arg
      352 +is zero, the calling process will be unregistered and
      353 +will not receive further
      354 +.Dv SIGPOLL
      355 +signals.
      356 +On failure,
      357 +.Va errno
      358 +is set to one of the following values:
      359 +.Bl -tag -width EINVAL
      360 +.It Sy EINVAL
      361 +.Fa arg
      362 +value is invalid or
      363 +.Fa arg
      364 +is zero and process is not registered to receive the
      365 +.Dv SIGPOLL
      366 +signal.
      367 +.It Sy EAGAIN
 466  368  Allocation of a data structure to store the signal request failed.
 467      -.RE
 468      -
 469      -.RE
 470      -
 471      -.sp
 472      -.ne 2
 473      -.na
 474      -\fB\fBI_GETSIG\fR\fR
 475      -.ad
 476      -.RS 15n
      369 +.El
      370 +.It Dv I_GETSIG
 477  371  Returns the events for which the calling process is currently registered to be
 478      -sent a \fBSIGPOLL\fR signal.  The events are returned as a bitmask pointed to
 479      -by \fIarg\fR, where the events are those specified in the description of
 480      -\fBI_SETSIG\fR above. On failure, \fBerrno\fR is set to one of the following
 481      -values:
 482      -.sp
 483      -.ne 2
 484      -.na
 485      -\fB\fBEINVAL\fR\fR
 486      -.ad
 487      -.RS 10n
 488      -Process not registered to receive the \fBSIGPOLL\fR signal.
 489      -.RE
 490      -
 491      -.sp
 492      -.ne 2
 493      -.na
 494      -\fB\fBEFAULT\fR\fR
 495      -.ad
 496      -.RS 10n
 497      -\fIarg\fR points outside the allocated address space.
 498      -.RE
 499      -
 500      -.RE
 501      -
 502      -.sp
 503      -.ne 2
 504      -.na
 505      -\fB\fBI_FIND\fR\fR
 506      -.ad
 507      -.RS 15n
      372 +sent a
      373 +.Dv SIGPOLL
      374 +signal.
      375 +The events are returned as a bitmask pointed to by
      376 +.Va arg ,
      377 +where the events are those specified in the description of
      378 +.Dv I_SETSIG
      379 +above.
      380 +On failure,
      381 +.Va errno
      382 +is set to one of the following values:
      383 +.Bl -tag -width EINVAL
      384 +.It Sy EINVAL
      385 +Process not registered to receive the
      386 +.Dv SIGPOLL
      387 +signal.
      388 +.It Sy EFAULT
      389 +.Fa arg
      390 +points outside the allocated address space.
      391 +.El
      392 +.It Dv I_FIND
 508  393  Compares the names of all modules currently present in the stream to the name
 509      -pointed to by \fIarg\fR, and returns 1 if the named module is present in the
 510      -stream. It returns 0 if the named module is not present. On failure,
 511      -\fBerrno\fR is set to one of the following values:
 512      -.sp
 513      -.ne 2
 514      -.na
 515      -\fB\fBEFAULT\fR\fR
 516      -.ad
 517      -.RS 10n
 518      -\fIarg\fR points outside the allocated address space.
 519      -.RE
 520      -
 521      -.sp
 522      -.ne 2
 523      -.na
 524      -\fB\fBEINVAL\fR\fR
 525      -.ad
 526      -.RS 10n
 527      -\fIarg\fR does not contain a valid module name.
 528      -.RE
 529      -
 530      -.RE
 531      -
 532      -.sp
 533      -.ne 2
 534      -.na
 535      -\fB\fBI_PEEK\fR\fR
 536      -.ad
 537      -.RS 15n
      394 +pointed to by
      395 +.Fa arg ,
      396 +and returns 1 if the named module is present in the stream.
      397 +It returns 0 if the named module is not present.
      398 +On failure,
      399 +.Va errno
      400 +is set to one of the following values:
      401 +.Bl -tag -width EINVAL
      402 +.It Sy EFAULT
      403 +.Fa arg
      404 +points outside the allocated address space.
      405 +.It Sy EINVAL
      406 +.Fa arg
      407 +does not contain a valid module name.
      408 +.El
      409 +.It Dv I_PEEK
 538  410  Allows a user to retrieve the information in the first message on the stream
 539      -head read queue without taking the message off the queue. \fBI_PEEK\fR is
 540      -analogous to \fBgetmsg\fR(2) except that it does not remove the message from
 541      -the queue. \fIarg\fR points to a \fBstrpeek\fR structure, which contains the
 542      -following members:
 543      -.sp
 544      -.in +2
 545      -.nf
      411 +head read queue without taking the message off the queue.
      412 +.Dv I_PEEK
      413 +is analogous to
      414 +.Xr getmsg 2
      415 +except that it does not remove the message from the queue.
      416 +.Fa arg
      417 +points to a
      418 +.Vt strpeek
      419 +structure, which contains the following members:
      420 +.Bd -literal -offset 2n
 546  421  struct strbuf ctlbuf;
 547      -struct strbuf   databuf;
      422 +struct strbuf databuf;
 548  423  long flags;
 549      -.fi
 550      -.in -2
 551      -
 552      -The \fBmaxlen\fR field in the \fBctlbuf\fR and \fBdatabuf\fR \fBstrbuf\fR
 553      -structures (see \fBgetmsg\fR(2)) must be set to the number of bytes of control
 554      -information and/or data information, respectively, to retrieve. \fBflags\fR may
 555      -be set to \fBRS_HIPRI\fR or \fB0\fR. If \fBRS_HIPRI\fR is set, \fBI_PEEK\fR
 556      -will look for a high priority message on the stream head read queue. Otherwise,
 557      -\fBI_PEEK\fR will look for the first message on the stream head read queue.
 558      -.sp
 559      -\fBI_PEEK\fR returns \fB1\fR if a message was retrieved, and returns \fB0\fR if
 560      -no message was found on the stream head read queue. It does not wait for a
 561      -message to arrive. On return, \fBctlbuf\fR specifies information in the control
 562      -buffer, \fBdatabuf\fR specifies information in the data buffer, and \fBflags\fR
 563      -contains the value \fBRS_HIPRI\fR or \fB0\fR. On failure, \fBerrno\fR is set to
 564      -the following value:
 565      -.sp
 566      -.ne 2
 567      -.na
 568      -\fB\fBEFAULT\fR\fR
 569      -.ad
 570      -.RS 11n
 571      -\fIarg\fR points, or the buffer area specified in \fBctlbuf\fR or \fBdatabuf\fR
      424 +.Ed
      425 +.Pp
      426 +The
      427 +.Ft maxlen
      428 +field in the
      429 +.Vt ctlbuf
      430 +and
      431 +.Vt databuf
      432 +.Vt strbuf
      433 +structures (see
      434 +.Xr getmsg 2 )
      435 +must be set to the number of bytes of control
      436 +information and/or data information, respectively, to retrieve.
      437 +.Fa flags
      438 +may be set to
      439 +.Dv RS_HIPRI
      440 +or
      441 +.Sy 0 .
      442 +If
      443 +.Dv RS_HIPRI
      444 +is set,
      445 +.Dv I_PEEK
      446 +will look for a high priority message on the stream head read queue.
      447 +Otherwise,
      448 +.Dv I_PEEK
      449 +will look for the first message on the stream head read queue.
      450 +.Pp
      451 +.Dv I_PEEK
      452 +returns
      453 +.Sy 1
      454 +if a message was retrieved, and returns
      455 +.Sy 0
      456 +if no message was found on the stream head read queue.
      457 +It does not wait for a message to arrive.
      458 +On return,
      459 +.Vt ctlbuf
      460 +specifies information in the control buffer,
      461 +.Vt databuf
      462 +specifies information in the data buffer, and
      463 +.Fa flags
      464 +contains the value
      465 +.Dv RS_HIPRI
      466 +or
      467 +.Sy 0 .
      468 +On failure,
      469 +.Va errno
      470 +is set to the following value:
      471 +.Bl -tag -width EBADMSG
      472 +.It Er EFAULT
      473 +.Fa arg
      474 +points, or the buffer area specified in
      475 +.Vt ctlbuf
      476 +or
      477 +.Vt databuf
 572  478  is, outside the allocated address space.
 573      -.RE
 574      -
 575      -.sp
 576      -.ne 2
 577      -.na
 578      -\fB\fBEBADMSG\fR\fR
 579      -.ad
 580      -.RS 11n
 581      -Queued message to be read is not valid for \fBI_PEEK\fR.
 582      -.RE
 583      -
 584      -.sp
 585      -.ne 2
 586      -.na
 587      -\fB\fBEINVAL\fR\fR
 588      -.ad
 589      -.RS 11n
 590      -Illegal value for \fBflags\fR.
 591      -.RE
 592      -
 593      -.sp
 594      -.ne 2
 595      -.na
 596      -\fB\fBENOSR\fR\fR
 597      -.ad
 598      -.RS 11n
 599      -Unable to allocate buffers to perform the I_PEEK due to insufficient STREAMS
 600      -memory resources.
 601      -.RE
 602      -
 603      -.RE
 604      -
 605      -.sp
 606      -.ne 2
 607      -.na
 608      -\fB\fBI_SRDOPT\fR\fR
 609      -.ad
 610      -.RS 15n
 611      -Sets the read mode (see \fBread\fR(2)) using the value of the argument
 612      -\fIarg\fR. Legal \fIarg\fR values are:
 613      -.sp
 614      -.ne 2
 615      -.na
 616      -\fBRNORM\fR
 617      -.ad
 618      -.RS 9n
      479 +.It Er EBADMSG
      480 +Queued message to be read is not valid for
      481 +.Dv I_PEEK .
      482 +.It Er EINVAL
      483 +Illegal value for
      484 +.Vt flags .
      485 +.It Er ENOSR
      486 +Unable to allocate buffers to perform the
      487 +.Dv I_PEEK
      488 +due to insufficient STREAMS memory resources.
      489 +.El
      490 +.It Dv I_SRDOPT
      491 +Sets the read mode (see
      492 +.Xr read 2 )
      493 +using the value of the argument
      494 +.Va arg .
      495 +Legal
      496 +.Va arg
      497 +values are:
      498 +.Bl -tag -width RNORM
      499 +.It Dv RNORM
 619  500  Byte-stream mode, the default.
 620      -.RE
 621      -
 622      -.sp
 623      -.ne 2
 624      -.na
 625      -\fBRMSGD\fR
 626      -.ad
 627      -.RS 9n
      501 +.It Dv RMSGD
 628  502  Message-discard mode.
 629      -.RE
 630      -
 631      -.sp
 632      -.ne 2
 633      -.na
 634      -\fBRMSGN\fR
 635      -.ad
 636      -.RS 9n
      503 +.It Dv RMSGN
 637  504  Message-nondiscard mode.
 638      -.RE
 639      -
      505 +.El
      506 +.Pp
 640  507  In addition, the stream head's treatment of control messages may be changed by
 641      -setting the following flags in \fIarg\fR:
 642      -.sp
 643      -.ne 2
 644      -.na
 645      -\fBRPROTNORM\fR
 646      -.ad
 647      -.RS 13n
 648      -Reject \fBread()\fR with \fBEBADMSG\fR if a control message is at the front of
 649      -the stream head read queue.
 650      -.RE
 651      -
 652      -.sp
 653      -.ne 2
 654      -.na
 655      -\fBRPROTDAT\fR
 656      -.ad
 657      -.RS 13n
      508 +setting the following flags in
      509 +.Va arg :
      510 +.Bl -tag -width RPROTNORM
      511 +.It Dv RPROTNORM
      512 +Reject
      513 +.Xr read 2
      514 +with
      515 +.Er EBADMSG
      516 +if a control message is at the front of the stream head read queue.
      517 +.It Dv RPROTDAT
 658  518  Deliver the control portion of a message as data when a user issues
 659      -\fBread()\fR. This is the default behavior.
 660      -.RE
 661      -
 662      -.sp
 663      -.ne 2
 664      -.na
 665      -\fBRPROTDIS\fR
 666      -.ad
 667      -.RS 13n
      519 +.Xr read 2 .
      520 +This is the default behavior.
      521 +.It Dv RPROTDIS
 668  522  Discard the control portion of a message, delivering any data portion, when a
 669      -user issues a \fBread\fR(\|).
 670      -.RE
 671      -
 672      -On failure, \fBerrno\fR is set to the following value:
 673      -.sp
 674      -.ne 2
 675      -.na
 676      -\fB\fBEINVAL\fR\fR
 677      -.ad
 678      -.RS 10n
 679      -\fIarg\fR is not one of the above legal values, or \fIarg\fR is the bitwise
 680      -inclusive \fBOR\fR of \fBRMSGD\fR and \fBRMSGN\fR.
 681      -.RE
 682      -
 683      -.RE
 684      -
 685      -.sp
 686      -.ne 2
 687      -.na
 688      -\fB\fBI_GRDOPT\fR\fR
 689      -.ad
 690      -.RS 15n
 691      -Returns the current read mode setting in an \fBint\fR pointed to by the
 692      -argument \fIarg\fR. Read modes are described in \fBread\fR(\|). On failure,
 693      -\fBerrno\fR is set to the following value:
 694      -.sp
 695      -.ne 2
 696      -.na
 697      -\fB\fBEFAULT\fR\fR
 698      -.ad
 699      -.RS 10n
 700      -\fIarg\fR points outside the allocated address space.
 701      -.RE
 702      -
 703      -.RE
 704      -
 705      -.sp
 706      -.ne 2
 707      -.na
 708      -\fB\fBI_NREAD\fR\fR
 709      -.ad
 710      -.RS 15n
      523 +user issues a
      524 +.Xr read 2 .
      525 +.El
      526 +.Pp
      527 +On failure,
      528 +.Va errno
      529 +is set to the following value:
      530 +.Bl -tag -width EINVAL
      531 +.It Er EINVAL
      532 +.Va arg
      533 +is not one of the above legal values, or
      534 +.Va arg
      535 +is the bitwise
      536 +inclusive
      537 +.Sy OR
      538 +of
      539 +.Dv RMSGD
      540 +and
      541 +.Dv RMSGN .
      542 +.El
      543 +.It Dv I_GRDOPT
      544 +Returns the current read mode setting in an
      545 +.Vt int
      546 +pointed to by the argument
      547 +.Fa arg .
      548 +Read modes are described in
      549 +.Xr read 2 .
      550 +On failure,
      551 +.Va errno
      552 +is set to the following value:
      553 +.Bl -tag -width EFAULT
      554 +.It Er EFAULT
      555 +.Fa arg
      556 +points outside the allocated address space.
      557 +.El
      558 +.It Dv I_NREAD
 711  559  Counts the number of data bytes in data blocks in the first message on the
 712  560  stream head read queue, and places this value in the location pointed to by
 713      -\fIarg\fR. The return value for the command is the number of messages on the
 714      -stream head read queue. For example, if zero is returned in \fIarg\fR, but the
 715      -\fBioctl\fR return value is greater than zero, this indicates that a
 716      -zero-length message is next on the queue. On failure, \fBerrno\fR is set to the
 717      -following value:
 718      -.sp
 719      -.ne 2
 720      -.na
 721      -\fB\fBEFAULT\fR\fR
 722      -.ad
 723      -.RS 10n
 724      -\fIarg\fR points outside the allocated address space.
 725      -.RE
 726      -
 727      -.RE
 728      -
 729      -.sp
 730      -.ne 2
 731      -.na
 732      -\fB\fBI_FDINSERT\fR\fR
 733      -.ad
 734      -.RS 15n
      561 +.Fa arg .
      562 +The return value for the command is the number of messages on the
      563 +stream head read queue.
      564 +For example, if zero is returned in
      565 +.Fa arg ,
      566 +but the
      567 +.Fn ioctl
      568 +return value is greater than zero, this indicates that a
      569 +zero-length message is next on the queue.
      570 +On failure,
      571 +.Va errno
      572 +is set to the following value:
      573 +.Bl -tag -width EFAULT
      574 +.It Er EFAULT
      575 +.Fa arg
      576 +points outside the allocated address space.
      577 +.El
      578 +.It Dv I_FDINSERT
 735  579  Creates a message from specified buffer(s), adds information about another
 736      -stream and sends the message downstream. The message contains a control part
 737      -and an optional data part. The data and control parts to be sent are
      580 +stream and sends the message downstream.
      581 +The message contains a control part and an optional data part.
      582 +The data and control parts to be sent are
 738  583  distinguished by placement in separate buffers, as described below.
 739      -.sp
 740      -The \fIarg\fR argument points to a \fBstrfdinsert\fR structure, which contains
      584 +.Pp
      585 +The
      586 +.Fa arg
      587 +argument points to a
      588 +.Vt strfdinsert
      589 +structure, which contains
 741  590  the following members:
 742      -.sp
 743      -.in +2
 744      -.nf
      591 +.Bd -literal -offset 2n
 745  592  struct  strbuf  ctlbuf;
 746  593  struct  strbuf  databuf;
 747      -t_uscalar_t  flags;
 748      -int  fildes;
 749      -int  offset;
 750      -.fi
 751      -.in -2
 752      -
 753      -The \fBlen\fR member in the \fBctlbuf strbuf\fR structure (see \fBputmsg\fR(2))
 754      -must be set to the size of a  \fBt_uscalar_t\fR plus the number of bytes of
 755      -control information to be sent with the message. The \fBfildes\fR member
 756      -specifies the file descriptor of the other stream, and the \fBoffset\fR member,
 757      -which must be suitably aligned for use as a \fBt_uscalar_t\fR, specifies the
 758      -offset from the start of the control buffer where \fBI_FDINSERT\fR will store a
 759      -\fBt_uscalar_t\fR whose interpretation is specific to the stream end. The
 760      -\fBlen\fR member in the \fBdatabuf strbuf\fR structure must be set to the
 761      -number of bytes of data information to be sent with the message, or to 0 if no
 762      -data part is to be sent.
 763      -.sp
 764      -The \fBflags\fR member specifies the type of message to be created. A normal
 765      -message is created if \fBflags\fR is set to 0, and a high-priority message is
 766      -created if \fBflags\fR is set to \fBRS_HIPRI\fR. For non-priority messages,
 767      -\fBI_FDINSERT\fR will block if the stream write queue is full due to internal
 768      -flow control conditions. For priority messages,  \fBI_FDINSERT\fR does not
 769      -block on this condition. For non-priority messages,  \fBI_FDINSERT\fR does not
 770      -block when the write queue is full and  \fBO_NDELAY\fR or  \fBO_NONBLOCK\fR is
 771      -set. Instead, it fails and sets \fBerrno\fR to \fBEAGAIN\fR.
 772      -.sp
 773      -\fBI_FDINSERT\fR also blocks, unless prevented by lack of internal resources,
 774      -waiting for the availability of message blocks in the stream, regardless of
 775      -priority or whether \fBO_NDELAY\fR or \fBO_NONBLOCK\fR has been specified. No
 776      -partial message is sent.
 777      -.sp
 778      -The \fBioctl()\fR function with the \fBI_FDINSERT\fR command will fail if:
 779      -.sp
 780      -.ne 2
 781      -.na
 782      -\fB\fBEAGAIN\fR\fR
 783      -.ad
 784      -.RS 10n
 785      -A non-priority message is specified, the \fBO_NDELAY\fR or \fBO_NONBLOCK\fR
      594 +t_uscalar_t     flags;
      595 +int             fildes;
      596 +int             offset;
      597 +.Ed
      598 +.Pp
      599 +The
      600 +.Fa len
      601 +member in the
      602 +.Vt ctlbuf
      603 +.Vt strbuf
      604 +structure (see
      605 +.Xr putmsg 2 )
      606 +must be set to the size of a
      607 +.Vt t_uscalar_t
      608 +plus the number of bytes of
      609 +control information to be sent with the message.
      610 +The
      611 +.Fa fildes
      612 +member specifies the file descriptor of the other stream, and the
      613 +.Fa offset
      614 +member, which must be suitably aligned for use as a
      615 +.Vt t_uscalar_t ,
      616 +specifies the offset from the start of the control buffer where
      617 +.Dv I_FDINSERT
      618 +will store a
      619 +.Vt t_uscalar_t
      620 +whose interpretation is specific to the stream end.
      621 +The
      622 +.Fa len
      623 +member in the
      624 +.Vt databuf
      625 +.Vt strbuf
      626 +structure must be set to the number of bytes of data information to be sent with
      627 +the message, or to 0 if no data part is to be sent.
      628 +.Pp
      629 +The
      630 +.Fa flags
      631 +member specifies the type of message to be created.
      632 +A normal message is created if
      633 +.Fa flags
      634 +is set to 0, and a high-priority message is created if
      635 +.Fa flags
      636 +is set to
      637 +.Dv RS_HIPRI .
      638 +For non-priority messages,
      639 +.Dv I_FDINSERT
      640 +will block if the stream write queue is full due to internal
      641 +flow control conditions.
      642 +For priority messages,
      643 +.Dv I_FDINSERT
      644 +does not block on this condition.
      645 +or non-priority messages,
      646 +.Dv I_FDINSERT
      647 +does not
      648 +block when the write queue is full and
      649 +.Dv O_NDELAY
      650 +or
      651 +.Dv O_NONBLOCK
      652 +is set.
      653 +Instead, it fails and sets
      654 +.Va errno
      655 +to
      656 +.Er EAGAIN .
      657 +.Pp
      658 +.Dv I_FDINSERT
      659 +also blocks, unless prevented by lack of internal resources, waiting for the
      660 +availability of message blocks in the stream, regardless of priority or whether
      661 +.Dv O_NDELAY
      662 +or
      663 +.Dv O_NONBLOCK
      664 +has been specified.
      665 +No partial message is sent.
      666 +.Pp
      667 +The
      668 +.Fn ioctl
      669 +function with the
      670 +.Dv I_FDINSERT
      671 +command will fail if:
      672 +.Bl -tag -width EAGAIN
      673 +.It Er EAGAIN
      674 +A non-priority message is specified, the
      675 +.Dv O_NDELAY
      676 +or
      677 +.Dv O_NONBLOCK
 786  678  flag is set, and the stream write queue is full due to internal flow control
 787  679  conditions.
 788      -.RE
 789      -
 790      -.sp
 791      -.ne 2
 792      -.na
 793      -\fB\fBENOSR\fR\fR
 794      -.ad
 795      -.RS 10n
      680 +.It Er ENOSR
 796  681  Buffers can not be allocated for the message that is to be created.
 797      -.RE
 798      -
 799      -.sp
 800      -.ne 2
 801      -.na
 802      -\fB\fBEFAULT\fR\fR
 803      -.ad
 804      -.RS 10n
 805      -The \fIarg\fR argument points, or the buffer area specified in \fBctlbuf\fR or
 806      -\fBdatabuf\fR is, outside the allocated address space.
 807      -.RE
 808      -
 809      -.sp
 810      -.ne 2
 811      -.na
 812      -\fB\fBEINVAL\fR\fR
 813      -.ad
 814      -.RS 10n
 815      -One of the following: The \fBfildes\fR member of the \fBstrfdinsert\fR
      682 +.It Er EFAULT
      683 +The
      684 +.Fa arg
      685 +argument points, or the buffer area specified in
      686 +.Vt ctlbuf
      687 +or
      688 +.Vt databuf
      689 +is, outside the allocated address space.
      690 +.It Er EINVAL
      691 +One of the following: The
      692 +.Fa fildes
      693 +member of the
      694 +.Vt strfdinsert
 816  695  structure is not a valid, open stream file descriptor; the size of a
 817      -\fBt_uscalar_t\fR plus \fBoffset\fR is greater than the \fBlen\fR member for
 818      -the buffer specified through \fBctlptr\fR; the \fBoffset\fR member does not
 819      -specify a properly-aligned location in the data buffer; or an undefined value
 820      -is stored in \fBflags\fR.
 821      -.RE
 822      -
 823      -.sp
 824      -.ne 2
 825      -.na
 826      -\fB\fBENXIO\fR\fR
 827      -.ad
 828      -.RS 10n
 829      -Hangup received on the \fBfildes\fR argument of the \fBioctl\fR call or the
 830      -\fBfildes\fR member of the \fBstrfdinsert\fR structure.
 831      -.RE
 832      -
 833      -.sp
 834      -.ne 2
 835      -.na
 836      -\fB\fBERANGE\fR\fR
 837      -.ad
 838      -.RS 10n
 839      -The \fBlen\fR field for the buffer specified through \fBdatabuf\fR does not
 840      -fall within the range specified by the maximum and minimum packet sizes of the
 841      -topmost stream module; or the \fBlen\fR member for the buffer specified through
 842      -\fBdatabuf\fR is larger than the maximum configured size of the data part of a
 843      -message; or the \fBlen\fR member for the buffer specified through \fBctlbuf\fR
      696 +.Vt t_uscalar_t
      697 +plus
      698 +.Fa offset
      699 +is greater than the
      700 +.Fa len
      701 +member for the buffer specified through
      702 +.Fa ctlptr ;
      703 +the
      704 +.Fa offset
      705 +member does not specify a properly-aligned location in the data buffer; or an
      706 +undefined value is stored in
      707 +.Fa flags .
      708 +.It Er ENXIO
      709 +Hangup received on the
      710 +.Fa fildes
      711 +argument of the
      712 +.Fn ioctl
      713 +call or the
      714 +.Fa fildes
      715 +member of the
      716 +.Vt strfdinsert
      717 +structure.
      718 +.It Er ERANGE
      719 +The
      720 +.Fa len
      721 +field for the buffer specified through
      722 +.Vt databuf
      723 +does not fall within the range specified by the maximum and minimum packet
      724 +sizes of the topmost stream module; or the
      725 +.Fa len
      726 +member for the buffer specified through
      727 +.Vt databuf
      728 +is larger than the maximum configured size of the data part of a message; or the
      729 +.Fa len
      730 +member for the buffer specified through
      731 +.Vt ctlbuf
 844  732  is larger than the maximum configured size of the control part of a message.
 845      -.RE
 846      -
 847      -\fBI_FDINSERT\fR can also fail if an error message was received by the stream
 848      -head of the stream corresponding to the \fBfildes\fR member of the
 849      -\fBstrfdinsert\fR structure. In this case, \fBerrno\fR will be set to the value
 850      -in the message.
 851      -.RE
 852      -
 853      -.sp
 854      -.ne 2
 855      -.na
 856      -\fB\fBI_STR\fR\fR
 857      -.ad
 858      -.RS 15n
 859      -Constructs an internal \fBSTREAMS\fR ioctl message from the data pointed to by
 860      -\fIarg\fR, and sends that message downstream.
 861      -.sp
 862      -This mechanism is provided to send user \fBioctl\fR requests to downstream
 863      -modules and drivers. It allows information to be sent with the \fBioctl\fR, and
 864      -will return to the user any information sent upstream by the downstream
 865      -recipient. \fBI_STR\fR blocks until the system responds with either a positive
 866      -or negative acknowledgement message, or until the request times out after some
 867      -period of time. If the request times out, it fails with \fBerrno\fR set to
 868      -\fBETIME\fR.
 869      -.sp
 870      -To send requests downstream, \fIarg\fR must point to a \fBstrioctl\fR structure
 871      -which contains the following members:
 872      -.sp
 873      -.in +2
 874      -.nf
      733 +.El
      734 +.Pp
      735 +.Dv I_FDINSERT
      736 +can also fail if an error message was received by the stream
      737 +head of the stream corresponding to the
      738 +.Fa fildes
      739 +member of the
      740 +.Vt strfdinsert
      741 +structure.
      742 +In this case,
      743 +.Va errno
      744 +will be set to the value in the message.
      745 +.It Dv I_STR
      746 +Constructs an internal
      747 +.Sy STREAMS
      748 +ioctl message from the data pointed to by
      749 +.Fa arg ,
      750 +and sends that message downstream.
      751 +.Pp
      752 +This mechanism is provided to send user
      753 +.Fn ioctl
      754 +requests to downstream modules and drivers.
      755 +It allows information to be sent with the
      756 +.Fn ioctl ,
      757 +and will return to the user any information sent upstream by the downstream
      758 +recipient.
      759 +.Dv I_STR
      760 +blocks until the system responds with either a positive or negative
      761 +acknowledgement message, or until the request times out after some period of
      762 +time.
      763 +If the request times out, it fails with
      764 +.Va errno
      765 +set to
      766 +.Er ETIME .
      767 +.Pp
      768 +To send requests downstream,
      769 +.Fa arg
      770 +must point to a
      771 +.Vt strioctl
      772 +structure which contains the following members:
      773 +.Bd -literal -offset 2n
 875  774  int  ic_cmd;
 876  775  int  ic_timout;
 877  776  int  ic_len;
 878  777  char  *ic_dp;
 879      -.fi
 880      -.in -2
 881      -
 882      -\fBic_cmd\fR is the internal \fBioctl\fR command intended for a downstream
 883      -module or driver and \fBic_timout\fR is the number of seconds (-1 = infinite, 0
 884      -= use default, >0 = as specified) an \fBI_STR\fR request will wait for
 885      -acknowledgement before timing out. \fBic_len\fR is the number of bytes in the
 886      -data argument and \fBic_dp\fR is a pointer to the data argument. The
 887      -\fBic_len\fR field has two uses: on input, it contains the length of the data
      778 +.Ed
      779 +.Pp
      780 +.Fa ic_cmd
      781 +is the internal
      782 +.Fn ioctl
      783 +command intended for a downstream module or driver and
      784 +.Fa ic_timout
      785 +is the number of seconds (-1 = infinite, 0 = use default, >0 = as specified) an
      786 +.Dv I_STR
      787 +request will wait for acknowledgement before timing out.
      788 +.Fa ic_len
      789 +is the number of bytes in the data argument and
      790 +.Fa ic_dp
      791 +is a pointer to the data argument.
      792 +The
      793 +.Fa ic_len
      794 +field has two uses: on input, it contains the length of the data
 888  795  argument passed in, and on return from the command, it contains the number of
 889      -bytes being returned to the user (the buffer pointed to by \fBic_dp\fR should
 890      -be large enough to contain the maximum amount of data that any module or the
 891      -driver in the stream can return).
 892      -.sp
 893      -At most one \fBI_STR\fR can be active on a stream.  Further \fBI_STR\fR calls
 894      -will block until the active \fBI_STR\fR completes via  a  positive  or negative
 895      -acknowlegment, a timeout, or an error condition at the stream head.  By setting
 896      -the \fBic_timout\fR  field  to  0, the  user is requesting STREAMS to provide
 897      -the  \fBDEFAULT\fR timeout. The default timeout is specific to the STREAMS
      796 +bytes being returned to the user (the buffer pointed to by
      797 +.Fa ic_dp
      798 +should be large enough to contain the maximum amount of data that any module or
      799 +the driver in the stream can return).
      800 +.Pp
      801 +At most one
      802 +.Dv I_STR
      803 +can be active on a stream.
      804 +Further
      805 +.Dv I_STR
      806 +calls
      807 +will block until the active
      808 +.Dv I_STR
      809 +completes via a positive or negative
      810 +acknowlegment, a timeout, or an error condition at the stream head.
      811 +By setting the
      812 +.Fa ic_timout
      813 +field to 0, the user is requesting STREAMS to provide
      814 +the
      815 +.Sy DEFAULT
      816 +timeout.
      817 +The default timeout is specific to the STREAMS
 898  818  implementation and may vary depending on which release of Solaris you are
 899      -using. For Solaris 8 (and earlier versions), the default timeout is fifteen
 900      -seconds. The \fBO_NDELAY\fR and \fBO_NONBLOCK\fR (see \fBopen\fR(2)) flags have
 901      -no effect on this call.
 902      -.sp
 903      -The stream head will convert the information pointed to by the \fBstrioctl\fR
 904      -structure to an internal \fBioctl\fR command message and send it downstream. On
 905      -failure, \fBerrno\fR is set to one of the following values:
 906      -.sp
 907      -.ne 2
 908      -.na
 909      -\fB\fBENOSR\fR\fR
 910      -.ad
 911      -.RS 10n
 912      -Unable to allocate buffers for the \fBioctl\fR message due to insufficient
 913      -STREAMS memory resources.
 914      -.RE
 915      -
 916      -.sp
 917      -.ne 2
 918      -.na
 919      -\fB\fBEFAULT\fR\fR
 920      -.ad
 921      -.RS 10n
 922      -Either \fIarg\fR points outside the allocated address space, or the buffer area
 923      -specified by \fBic_dp\fR and \fBic_len\fR (separately for data sent and data
 924      -returned) is outside the allocated address space.
 925      -.RE
 926      -
 927      -.sp
 928      -.ne 2
 929      -.na
 930      -\fB\fBEINVAL\fR\fR
 931      -.ad
 932      -.RS 10n
 933      -\fBic_len\fR is less than 0 or \fBic_len\fR is larger than the maximum
 934      -configured size of the data part of a message or \fBic_timout\fR is less than
 935      --1.
 936      -.RE
 937      -
 938      -.sp
 939      -.ne 2
 940      -.na
 941      -\fB\fBENXIO\fR\fR
 942      -.ad
 943      -.RS 10n
 944      -Hangup received on \fIfildes\fR.
 945      -.RE
 946      -
 947      -.sp
 948      -.ne 2
 949      -.na
 950      -\fB\fBETIME\fR\fR
 951      -.ad
 952      -.RS 10n
 953      -A downstream \fBioctl\fR timed out before acknowledgement was received.
 954      -.RE
 955      -
 956      -An \fBI_STR\fR can also fail while waiting for an acknowledgement if a message
 957      -indicating an error or a hangup is received at the stream head. In addition, an
      819 +using.
      820 +For Solaris 8 (and earlier versions), the default timeout is fifteen
      821 +seconds.
      822 +The
      823 +.Dv O_NDELAY
      824 +and
      825 +.Dv O_NONBLOCK
      826 +(see
      827 +.Xr open 2 )
      828 +flags have no effect on this call.
      829 +.Pp
      830 +The stream head will convert the information pointed to by the
      831 +.Vt strioctl
      832 +structure to an internal
      833 +.Fn ioctl
      834 +command message and send it downstream.
      835 +On failure,
      836 +.Va errno
      837 +is set to one of the following values:
      838 +.Bl -tag -width EFAULT
      839 +.It Er ENOSR
      840 +Unable to allocate buffers for the
      841 +.Fn ioctl
      842 +message due to insufficient STREAMS memory resources.
      843 +.It Er EFAULT
      844 +Either
      845 +.Fa arg
      846 +points outside the allocated address space, or the buffer area
      847 +specified by
      848 +.Fa ic_dp
      849 +and
      850 +.Fa ic_len
      851 +(separately for data sent and data returned) is outside the allocated address
      852 +space.
      853 +.It Er EINVAL
      854 +.Fa ic_len
      855 +is less than 0 or
      856 +.Fa ic_len
      857 +is larger than the maximum configured size of the data part of a message or
      858 +.Fa ic_timout
      859 +is less than \(mi1.
      860 +.It Er ENXIO
      861 +Hangup received on
      862 +.Fa fildes .
      863 +.It Er ETIME
      864 +A downstream
      865 +.Fn ioctl
      866 +timed out before acknowledgement was received.
      867 +.El
      868 +.Pp
      869 +An
      870 +.Dv I_STR
      871 +can also fail while waiting for an acknowledgement if a message
      872 +indicating an error or a hangup is received at the stream head.
      873 +In addition, an
 958  874  error code can be returned in the positive or negative acknowledgement message,
 959      -in the event the ioctl command sent downstream fails. For these cases,
 960      -\fBI_STR\fR will fail with \fBerrno\fR set to the value in the message.
 961      -.RE
 962      -
 963      -.sp
 964      -.ne 2
 965      -.na
 966      -\fB\fBI_SWROPT\fR\fR
 967      -.ad
 968      -.RS 15n
 969      -Sets the write mode using the value of the argument \fIarg\fR. Legal bit
 970      -settings for \fIarg\fR are:
 971      -.sp
 972      -.ne 2
 973      -.na
 974      -\fB\fBSNDZERO\fR\fR
 975      -.ad
 976      -.RS 11n
      875 +in the event the ioctl command sent downstream fails.
      876 +For these cases,
      877 +.Dv I_STR
      878 +will fail with
      879 +.Va errno
      880 +set to the value in the message.
      881 +.It Dv I_SWROPT
      882 +Sets the write mode using the value of the argument
      883 +.Fa arg .
      884 +Legal bit settings for
      885 +.Fa arg
      886 +are:
      887 +.Bl -tag -width SNDZERO
      888 +.It Dv SNDZERO
 977  889  Send a zero-length message downstream when a write of 0 bytes occurs.
 978      -.RE
 979      -
      890 +.El
      891 +.Pp
 980  892  To not send a zero-length message when a write of 0 bytes occurs, this bit must
 981      -not be set in \fIarg\fR.
 982      -.sp
 983      -On failure, \fBerrno\fR may be set to the following value:
 984      -.sp
 985      -.ne 2
 986      -.na
 987      -\fB\fBEINVAL\fR\fR
 988      -.ad
 989      -.RS 10n
 990      -\fIarg\fR is not the above legal value.
 991      -.RE
 992      -
 993      -.RE
 994      -
 995      -.sp
 996      -.ne 2
 997      -.na
 998      -\fB\fBI_GWROPT\fR\fR
 999      -.ad
1000      -.RS 15n
1001      -Returns the current write mode setting, as described above, in the \fBint\fR
1002      -that is pointed to by the argument \fIarg\fR.
1003      -.RE
1004      -
1005      -.sp
1006      -.ne 2
1007      -.na
1008      -\fB\fBI_SENDFD\fR\fR
1009      -.ad
1010      -.RS 15n
1011      -Requests the stream associated with \fIfildes\fR to send a message, containing
1012      -a file pointer, to the stream head at the other end of a stream pipe. The file
1013      -pointer corresponds to \fIarg\fR, which must be an open file descriptor.
1014      -.sp
1015      -\fBI_SENDFD\fR converts \fIarg\fR into the corresponding system file pointer.
1016      -It allocates a message block and inserts the file pointer in the block.  The
1017      -user id and group id associated with the sending process are also inserted.
1018      -This message is placed directly on the read queue (see \fBIntro\fR(3)) of the
1019      -stream head at the other end of the stream pipe to which it is connected.  On
1020      -failure, \fBerrno\fR is set to one of the following values:
1021      -.sp
1022      -.ne 2
1023      -.na
1024      -\fB\fBEAGAIN\fR\fR
1025      -.ad
1026      -.RS 10n
      893 +not be set in
      894 +.Fa arg .
      895 +.Pp
      896 +On failure,
      897 +.Va errno
      898 +may be set to the following value:
      899 +.Bl -tag -width EINVAL
      900 +.It Sy EINVAL
      901 +.Fa arg
      902 +is not the above legal value.
      903 +.El
      904 +.It Dv I_GWROPT
      905 +Returns the current write mode setting, as described above, in the
      906 +.Vt int
      907 +that is pointed to by the argument
      908 +.Fa arg .
      909 +.It Dv I_SENDFD
      910 +Requests the stream associated with
      911 +.Fa fildes
      912 +to send a message, containing
      913 +a file pointer, to the stream head at the other end of a stream pipe.
      914 +The file
      915 +pointer corresponds to
      916 +.Fa arg ,
      917 +which must be an open file descriptor.
      918 +.Pp
      919 +.Dv I_SENDFD
      920 +converts
      921 +.Fa arg
      922 +into the corresponding system file pointer.
      923 +It allocates a message block and inserts the file pointer in the block.
      924 +The user id and group id associated with the sending process are also inserted.
      925 +This message is placed directly on the read queue (see
      926 +.Xr Intro 3 )
      927 +of the stream head at the other end of the stream pipe to which it is connected.
      928 +On failure,
      929 +.Va errno
      930 +is set to one of the following values:
      931 +.Bl -tag -width EAGAIN
      932 +.It Er EAGAIN
1027  933  The sending stream is unable to allocate a message block to contain the file
1028  934  pointer.
1029      -.RE
1030      -
1031      -.sp
1032      -.ne 2
1033      -.na
1034      -\fB\fBEAGAIN\fR\fR
1035      -.ad
1036      -.RS 10n
      935 +.It Er EAGAIN
1037  936  The read queue of the receiving stream head is full and cannot accept the
1038      -message sent by \fBI_SENDFD.\fR
1039      -.RE
1040      -
1041      -.sp
1042      -.ne 2
1043      -.na
1044      -\fB\fBEBADF\fR\fR
1045      -.ad
1046      -.RS 10n
1047      -\fIarg\fR is not a valid, open file descriptor.
1048      -.RE
1049      -
1050      -.sp
1051      -.ne 2
1052      -.na
1053      -\fB\fBEINVAL\fR\fR
1054      -.ad
1055      -.RS 10n
1056      -\fIfildes\fR is not connected to a stream pipe.
1057      -.RE
1058      -
1059      -.sp
1060      -.ne 2
1061      -.na
1062      -\fB\fBENXIO\fR\fR
1063      -.ad
1064      -.RS 10n
1065      -Hangup received on \fIfildes\fR.
1066      -.RE
1067      -
1068      -.RE
1069      -
1070      -.sp
1071      -.ne 2
1072      -.na
1073      -\fB\fBI_RECVFD\fR\fR
1074      -.ad
1075      -.RS 15n
      937 +message sent by
      938 +.Dv I_SENDFD .
      939 +.It Er EBADF
      940 +.Fa arg
      941 +is not a valid, open file descriptor.
      942 +.It Er EINVAL
      943 +.Va fildes
      944 +is not connected to a stream pipe.
      945 +.It Er ENXIO
      946 +Hangup received on
      947 +.Fa fildes .
      948 +.El
      949 +.It Dv I_RECVFD
1076  950  Retrieves the file descriptor associated with the message sent by an
1077      -\fBI_SENDFD\fR \fBioctl\fR over a stream pipe. \fIarg\fR is a pointer to a data
1078      -buffer large enough to hold an \fBstrrecvfd\fR data structure containing the
1079      -following members:
1080      -.sp
1081      -.in +2
1082      -.nf
1083      -int  fd;
1084      -uid_t  uid;
1085      -gid_t  gid;
1086      -.fi
1087      -.in -2
1088      -
1089      -\fBfd\fR is an integer file descriptor. \fBuid\fR and \fBgid\fR are the user id
1090      -and group id, respectively, of the sending stream.
1091      -.sp
1092      -If \fBO_NDELAY\fR and \fBO_NONBLOCK\fR are clear (see \fBopen\fR(2)),
1093      -\fBI_RECVFD\fR will block until a message is present at the stream head. If
1094      -\fBO_NDELAY\fR or \fBO_NONBLOCK\fR is set, \fBI_RECVFD\fR will fail with
1095      -\fBerrno\fR set to \fBEAGAIN\fR if no message is present at the stream head.
1096      -.sp
1097      -If the message at the stream head is a message sent by an \fBI_SENDFD\fR, a new
      951 +.Dv I_SENDFD
      952 +.Fn ioctl
      953 +over a stream pipe.
      954 +.Fa arg
      955 +is a pointer to a data buffer large enough to hold an
      956 +.Vt strrecvfd
      957 +data structure containing the following members:
      958 +.Bd -literal -offset 2n
      959 +int     fd;
      960 +uid_t   uid;
      961 +gid_t   gid;
      962 +.Ed
      963 +.Pp
      964 +.Fa fd
      965 +is an integer file descriptor.
      966 +.Fa uid
      967 +and
      968 +.Fa gid
      969 +are the user id and group id, respectively, of the sending stream.
      970 +.Pp
      971 +If
      972 +.Dv O_NDELAY
      973 +and
      974 +.Dv O_NONBLOCK
      975 +are clear (see
      976 +.Xr open 2 ) ,
      977 +.Dv I_RECVFD
      978 +will block until a message is present at the stream head.
      979 +If
      980 +.Dv O_NDELAY
      981 +or
      982 +.Dv O_NONBLOCK
      983 +is set,
      984 +.Dv I_RECVFD
      985 +will fail with
      986 +.Va errno
      987 +set to
      988 +.Er EAGAIN
      989 +if no message is present at the stream head.
      990 +.Pp
      991 +If the message at the stream head is a message sent by an
      992 +.Dv I_SENDFD ,
      993 +a new
1098  994  user file descriptor is allocated for the file pointer contained in the
1099      -message. The new file descriptor is placed in the \fBfd\fR field of the
1100      -\fBstrrecvfd\fR structure. The structure is copied into the user data buffer
1101      -pointed to by \fIarg\fR. On failure, \fBerrno\fR is set to one of the following
1102      -values:
1103      -.sp
1104      -.ne 2
1105      -.na
1106      -\fB\fBEAGAIN\fR\fR
1107      -.ad
1108      -.RS 13n
1109      -A message is not present at the stream head read queue, and the \fBO_NDELAY\fR
1110      -or \fBO_NONBLOCK\fR flag is set.
1111      -.RE
1112      -
1113      -.sp
1114      -.ne 2
1115      -.na
1116      -\fB\fBEBADMSG\fR\fR
1117      -.ad
1118      -.RS 13n
      995 +message.
      996 +The new file descriptor is placed in the
      997 +.Fa fd
      998 +field of the
      999 +.Vt strrecvfd
     1000 +structure.
     1001 +The structure is copied into the user data buffer pointed to by
     1002 +.Fa arg .
     1003 +On failure,
     1004 +.Va errno
     1005 +is set to one of the following values:
     1006 +.Bl -tag -width EOVERFLOW
     1007 +.It Er EAGAIN
     1008 +A message is not present at the stream head read queue, and the
     1009 +.Dv O_NDELAY
     1010 +or
     1011 +.Dv O_NONBLOCK
     1012 +flag is set.
     1013 +.It Er EBADMSG
1119 1014  The message at the stream head read queue is not a message containing a passed
1120 1015  file descriptor.
1121      -.RE
1122      -
1123      -.sp
1124      -.ne 2
1125      -.na
1126      -\fB\fBEFAULT\fR\fR
1127      -.ad
1128      -.RS 13n
1129      -\fIarg\fR points outside the allocated address space.
1130      -.RE
1131      -
1132      -.sp
1133      -.ne 2
1134      -.na
1135      -\fB\fBEMFILE\fR\fR
1136      -.ad
1137      -.RS 13n
1138      -\fBNOFILES\fR file descriptors are currently open.
1139      -.RE
1140      -
1141      -.sp
1142      -.ne 2
1143      -.na
1144      -\fB\fBENXIO\fR\fR
1145      -.ad
1146      -.RS 13n
1147      -Hangup received on \fIfildes\fR.
1148      -.RE
1149      -
1150      -.sp
1151      -.ne 2
1152      -.na
1153      -\fB\fBEOVERFLOW\fR\fR
1154      -.ad
1155      -.RS 13n
1156      -\fIuid\fR or \fIgid\fR is too large to be stored in the structure pointed to by
1157      -\fIarg\fR.
1158      -.RE
1159      -
1160      -.RE
1161      -
1162      -.sp
1163      -.ne 2
1164      -.na
1165      -\fB\fBI_LIST\fR\fR
1166      -.ad
1167      -.RS 15n
     1016 +.It Er EFAULT
     1017 +.Fa arg
     1018 +points outside the allocated address space.
     1019 +.It Er EMFILE
     1020 +.Dv NOFILES
     1021 +file descriptors are currently open.
     1022 +.It Er ENXIO
     1023 +Hangup received on
     1024 +.Fa fildes .
     1025 +.It Er EOVERFLOW
     1026 +.Fa uid
     1027 +or
     1028 +.Fa gid
     1029 +is too large to be stored in the structure pointed to by
     1030 +.Fa arg .
     1031 +.El
     1032 +.It Dv I_LIST
1168 1033  Allows the user to list all the module names on the stream, up to and including
1169      -the topmost driver name. If \fIarg\fR is \fINULL\fR, the return value is the
1170      -number of modules, including the driver, that are on the stream pointed to by
1171      -\fIfildes\fR. This allows the user to allocate enough space for the module
1172      -names. If \fIarg\fR is non-null, it should point to an \fBstr_list\fR structure
1173      -that has the following members:
1174      -.sp
1175      -.in +2
1176      -.nf
     1034 +the topmost driver name.
     1035 +If
     1036 +.Fa arg
     1037 +is
     1038 +.Dv NULL ,
     1039 +the return value is the number of modules, including the driver, that are on
     1040 +the stream pointed to by
     1041 +.Fa fildes .
     1042 +This allows the user to allocate enough space for the module
     1043 +names.
     1044 +If
     1045 +.Fa arg
     1046 +is non-null, it should point to an
     1047 +.Vt str_list
     1048 +structure that has the following members:
     1049 +.Bd -literal -offset 2n
1177 1050  int sl_nmods;
1178 1051  struct  str_mlist  *sl_modlist;
1179      -.fi
1180      -.in -2
1181      -
1182      -The \fBstr_mlist\fR structure has the following member:
1183      -.sp
1184      -.in +2
1185      -.nf
     1052 +.Ed
     1053 +.Pp
     1054 +The
     1055 +.Vt str_mlist
     1056 +structure has the following member:
     1057 +.Bd -literal -offset 2n
1186 1058  char l_name[FMNAMESZ+1];
1187      -.fi
1188      -.in -2
1189      -
1190      -The \fBsl_nmods\fR member indicates the number of entries the process has
1191      -allocated in the array.  Upon return, the \fBsl_modlist\fR member of the
1192      -\fBstr_list\fR structure contains the list of module names, and the number of
1193      -entries that have been filled into the \fBsl_modlist\fR array is found in the
1194      -\fBsl_nmods\fR member (the number includes the number of modules including the
1195      -driver).  The return value from \fBioctl()\fR is 0.  The entries are filled in
     1059 +.Ed
     1060 +.Pp
     1061 +The
     1062 +.Fa sl_nmods
     1063 +member indicates the number of entries the process has allocated in the array.
     1064 +Upon return, the
     1065 +.Fa sl_modlist
     1066 +member of the
     1067 +.Vt str_list
     1068 +structure contains the list of module names, and the number of
     1069 +entries that have been filled into the
     1070 +.Fa sl_modlist
     1071 +array is found in the
     1072 +.Fa sl_nmods
     1073 +member (the number includes the number of modules including the driver).
     1074 +The return value from
     1075 +.Fn ioctl
     1076 +is 0.
     1077 +The entries are filled in
1196 1078  starting at the top of the stream and continuing downstream until either the
1197 1079  end of the stream is reached, or the number of requested modules
1198      -(\fBsl_nmods\fR) is satisfied. On failure, \fBerrno\fR may be set to one of the
1199      -following values:
1200      -.sp
1201      -.ne 2
1202      -.na
1203      -\fB\fBEINVAL\fR\fR
1204      -.ad
1205      -.RS 10n
1206      -The \fBsl_nmods\fR member is less than 1.
1207      -.RE
1208      -
1209      -.sp
1210      -.ne 2
1211      -.na
1212      -\fB\fBEAGAIN\fR\fR
1213      -.ad
1214      -.RS 10n
     1080 +.Pq Fa sl_nmods
     1081 +is satisfied.
     1082 +On failure,
     1083 +.Va errno
     1084 +may be set to one of the following values:
     1085 +.Bl -tag -width EINVAL
     1086 +.It Er EINVAL
     1087 +The
     1088 +.Fa sl_nmods
     1089 +member is less than 1.
     1090 +.It Er EAGAIN
1215 1091  Unable to allocate buffers
1216      -.RE
1217      -
1218      -.RE
1219      -
1220      -.sp
1221      -.ne 2
1222      -.na
1223      -\fB\fBI_ATMARK\fR\fR
1224      -.ad
1225      -.RS 15n
     1092 +.El
     1093 +.It Dv I_ATMARK
1226 1094  Allows the user to see if the current message on the stream head read queue is
1227      -``marked'' by some module downstream. \fIarg\fR determines how the checking is
     1095 +.Dq marked
     1096 +by some module downstream.
     1097 +.Fa arg
     1098 +determines how the checking is
1228 1099  done when there may be multiple marked messages on the stream head read queue.
1229 1100  It may take the following values:
1230      -.sp
1231      -.ne 2
1232      -.na
1233      -\fB\fBANYMARK\fR\fR
1234      -.ad
1235      -.RS 12n
     1101 +.Bl -tag -width LASTMARK
     1102 +.It Dv ANYMARK
1236 1103  Check if the message is marked.
1237      -.RE
1238      -
1239      -.sp
1240      -.ne 2
1241      -.na
1242      -\fB\fBLASTMARK\fR\fR
1243      -.ad
1244      -.RS 12n
     1104 +.It Dv LASTMARK
1245 1105  Check if the message is the last one marked on the queue.
1246      -.RE
1247      -
1248      -The return value is \fB1\fR if the mark condition is satisfied and \fB0\fR
1249      -otherwise. On failure, \fBerrno\fR is set to the following value:
1250      -.sp
1251      -.ne 2
1252      -.na
1253      -\fB\fBEINVAL\fR\fR
1254      -.ad
1255      -.RS 10n
1256      -Invalid \fIarg\fR value.
1257      -.RE
1258      -
1259      -.RE
1260      -
1261      -.sp
1262      -.ne 2
1263      -.na
1264      -\fB\fBI_CKBAND\fR\fR
1265      -.ad
1266      -.RS 15n
     1106 +.El
     1107 +.Pp
     1108 +The return value is
     1109 +.Sy 1
     1110 +if the mark condition is satisfied and
     1111 +.Sy 0
     1112 +otherwise.
     1113 +On failure,
     1114 +.Va errno
     1115 +is set to the following value:
     1116 +.Bl -tag -width EINVAL
     1117 +.It Er EINVAL
     1118 +Invalid
     1119 +.Fa arg
     1120 +value.
     1121 +.El
     1122 +.It Dv I_CKBAND
1267 1123  Check if the message of a given priority band exists on the stream head read
1268      -queue. This returns \fB1\fR if a message of a given priority exists, \fB0\fR if
1269      -not, or \fB\(mi1\fR on error. \fIarg\fR should be an integer containing the
1270      -value of the priority band in question. On failure, \fBerrno\fR is set to the
1271      -following value:
1272      -.sp
1273      -.ne 2
1274      -.na
1275      -\fB\fBEINVAL\fR\fR
1276      -.ad
1277      -.RS 10n
1278      -Invalid \fIarg\fR value.
1279      -.RE
1280      -
1281      -.RE
1282      -
1283      -.sp
1284      -.ne 2
1285      -.na
1286      -\fB\fBI_GETBAND\fR\fR
1287      -.ad
1288      -.RS 15n
     1124 +queue.
     1125 +This returns
     1126 +.Sy 1
     1127 +if a message of a given priority exists,
     1128 +.Sy 0
     1129 +if not, or
     1130 +.Sy \(mi1
     1131 +on error.
     1132 +.Fa arg
     1133 +should be an integer containing the value of the priority band in question.
     1134 +On failure,
     1135 +.Va errno
     1136 +is set to the following value:
     1137 +.Bl -tag -width EINVAL
     1138 +.It Er EINVAL
     1139 +Invalid
     1140 +.Fa arg
     1141 +value.
     1142 +.El
     1143 +.It Dv I_GETBAND
1289 1144  Returns the priority band of the first message on the stream head read queue in
1290      -the integer referenced by \fIarg\fR. On failure, \fBerrno\fR is set to the
1291      -following value:
1292      -.sp
1293      -.ne 2
1294      -.na
1295      -\fB\fBENODATA\fR\fR
1296      -.ad
1297      -.RS 11n
     1145 +the integer referenced by
     1146 +.Fa arg .
     1147 +On failure,
     1148 +.Va errno
     1149 +is set to the following value:
     1150 +.Bl -tag -width ENODATA
     1151 +.It Er ENODATA
1298 1152  No message on the stream head read queue.
1299      -.RE
1300      -
1301      -.RE
1302      -
1303      -.sp
1304      -.ne 2
1305      -.na
1306      -\fB\fBI_CANPUT\fR\fR
1307      -.ad
1308      -.RS 15n
1309      -Check if a certain band is writable. \fIarg\fR is set to the priority band in
1310      -question. The return value is \fB0\fR if the priority band \fIarg\fR is flow
1311      -controlled, \fB1\fR if the band is writable, or \fB\(mi1\fR on error. On
1312      -failure, \fBerrno\fR is set to the following value:
1313      -.sp
1314      -.ne 2
1315      -.na
1316      -\fB\fBEINVAL\fR\fR
1317      -.ad
1318      -.RS 10n
1319      -Invalid \fIarg\fR value.
1320      -.RE
1321      -
1322      -.RE
1323      -
1324      -.sp
1325      -.ne 2
1326      -.na
1327      -\fB\fBI_SETCLTIME\fR\fR
1328      -.ad
1329      -.RS 15n
     1153 +.El
     1154 +.It Dv I_CANPUT
     1155 +Check if a certain band is writable.
     1156 +.Fa arg
     1157 +is set to the priority band in question.
     1158 +The return value is
     1159 +.Sy 0
     1160 +if the priority band
     1161 +.Fa arg
     1162 +is flow controlled,
     1163 +.Sy 1
     1164 +if the band is writable, or
     1165 +.Sy \(mi1
     1166 +on error.
     1167 +On failure,
     1168 +.Va errno
     1169 +is set to the following value:
     1170 +.Bl -tag -width EINVAL
     1171 +.It Sy EINVAL
     1172 +Invalid
     1173 +.Va arg
     1174 +value.
     1175 +.El
     1176 +.It Dv I_SETCLTIME
1330 1177  Allows the user to set the time the stream head will delay when a stream is
1331      -closing and there are data on the write queues.  Before closing each module and
1332      -driver, the stream head will delay for the specified amount of time to allow
1333      -the data to drain. Note, however, that the module or driver may itself delay in
1334      -its close routine; this delay is independent of the stream head's delay and is
1335      -not settable. If, after the delay, data are still present, data will be
1336      -flushed. \fIarg\fR is a pointer to an integer containing the number of
     1178 +closing and there are data on the write queues.
     1179 +Before closing each module and driver, the stream head will delay for the
     1180 +specified amount of time to allow the data to drain.
     1181 +Note, however, that the module or driver may itself delay in its close routine;
     1182 +this delay is independent of the stream head's delay and is not settable.
     1183 +If, after the delay, data are still present, data will be flushed.
     1184 +.Fa arg
     1185 +is a pointer to an integer containing the number of
1337 1186  milliseconds to delay, rounded up to the nearest legal value on the system.
1338      -The default is fifteen seconds. On failure, \fBerrno\fR is set to the following
1339      -value:
1340      -.sp
1341      -.ne 2
1342      -.na
1343      -\fB\fBEINVAL\fR\fR
1344      -.ad
1345      -.RS 10n
1346      -Invalid \fIarg\fR value.
1347      -.RE
1348      -
1349      -.RE
1350      -
1351      -.sp
1352      -.ne 2
1353      -.na
1354      -\fB\fBI_GETCLTIME\fR\fR
1355      -.ad
1356      -.RS 15n
1357      -Returns the close time delay in the integer pointed by \fIarg\fR.
1358      -.RE
1359      -
1360      -.sp
1361      -.ne 2
1362      -.na
1363      -\fB\fBI_SERROPT\fR\fR
1364      -.ad
1365      -.RS 15n
1366      -Sets the error mode using the value of the argument \fIarg\fR.
1367      -.sp
     1187 +The default is fifteen seconds.
     1188 +On failure,
     1189 +.Va errno
     1190 +is set to the following value:
     1191 +.Bl -tag -width EINVAL
     1192 +.It Er EINVAL
     1193 +Invalid
     1194 +.Fa arg
     1195 +value.
     1196 +.El
     1197 +.It Dv I_GETCLTIME
     1198 +Returns the close time delay in the integer pointed by
     1199 +.Va arg .
     1200 +.It Dv I_SERROPT
     1201 +Sets the error mode using the value of the argument
     1202 +.Fa arg .
     1203 +.Pp
1368 1204  Normally stream head errors are persistent; once they are set due to an
1369      -\fBM_ERROR\fR or \fBM_HANGUP\fR, the error condition will remain until the
1370      -stream is closed. This option can be used to set the stream head into
1371      -non-persistent error mode i.e. once the error has been returned in response to
1372      -a \fBread\fR(2), \fBgetmsg\fR(2), \fBioctl\fR(2), \fBwrite\fR(2), or
1373      -\fBputmsg\fR(2) call the error condition will be cleared. The error mode can be
1374      -controlled independently for read and write side errors. Legal \fIarg\fR values
     1205 +.Dv M_ERROR
     1206 +or
     1207 +.Dv M_HANGUP ,
     1208 +the error condition will remain until the stream is closed.
     1209 +This option can be used to set the stream head into
     1210 +non-persistent error mode i\.e\. once the error has been returned in response
     1211 +to a
     1212 +.Xr read 2 ,
     1213 +.Xr getmsg 2 ,
     1214 +.Xr ioctl 2 ,
     1215 +.Xr write 2 ,
     1216 +or
     1217 +.Xr putmsg 2
     1218 +call the error condition will be cleared.
     1219 +The error mode can be controlled independently for read and write side errors.
     1220 +Legal
     1221 +.Fa arg
     1222 +values
1375 1223  are either none or one of:
1376      -.sp
1377      -.ne 2
1378      -.na
1379      -\fB\fBRERRNORM\fR\fR
1380      -.ad
1381      -.RS 18n
     1224 +.Bl -tag -width RERRNONPERSIST
     1225 +.It Dv RERRNORM
1382 1226  Persistent read errors, the default.
1383      -.RE
1384      -
1385      -.sp
1386      -.ne 2
1387      -.na
1388      -\fB\fBRERRNONPERSIST\fR\fR
1389      -.ad
1390      -.RS 18n
     1227 +.It Dv RERRNONPERSIST
1391 1228  Non-persistent read errors.
1392      -.RE
1393      -
1394      -\fBOR'ed\fR with either none or one of:
1395      -.sp
1396      -.ne 2
1397      -.na
1398      -\fB\fBWERRNORM\fR\fR
1399      -.ad
1400      -.RS 18n
     1229 +.El
     1230 +.Pp
     1231 +.Sy OR Ns 'ed
     1232 +with either none or one of:
     1233 +.Bl -tag -width WERRNONPERSIST
     1234 +.It Dv WERRNORM
1401 1235  Persistent write errors, the default.
1402      -.RE
1403      -
1404      -.sp
1405      -.ne 2
1406      -.na
1407      -\fB\fBWERRNONPERSIST\fR\fR
1408      -.ad
1409      -.RS 18n
     1236 +.It Dv WERRNONPERSIST
1410 1237  Non-persistent write errors.
1411      -.sp
1412      -When no value is specified e.g. for the read side error behavior then the
     1238 +.El
     1239 +.Pp
     1240 +When no value is specified e\.g\.  for the read side error behavior then the
1413 1241  behavior for that side will be left unchanged.
1414      -.RE
1415      -
1416      -On failure, \fBerrno\fR is set to the following value:
1417      -.sp
1418      -.ne 2
1419      -.na
1420      -\fB\fBEINVAL\fR\fR
1421      -.ad
1422      -.RS 10n
1423      -\fIarg\fR is not one of the above legal values.
1424      -.RE
1425      -
1426      -.RE
1427      -
1428      -.sp
1429      -.ne 2
1430      -.na
1431      -\fB\fBI_GERROPT\fR\fR
1432      -.ad
1433      -.RS 15n
1434      -Returns the current error mode setting in an \fBint\fR pointed to by the
1435      -argument \fIarg\fR. Error modes are described above for \fBI_SERROPT\fR. On
1436      -failure,\fBerrno\fR is set to the following value:
1437      -.sp
1438      -.ne 2
1439      -.na
1440      -\fB\fBEFAULT\fR\fR
1441      -.ad
1442      -.RS 10n
1443      -\fIarg\fR points outside the allocated address space.
1444      -.RE
1445      -
1446      -.RE
1447      -
1448      -.sp
1449      -.LP
     1242 +.Pp
     1243 +On failure,
     1244 +.Va errno
     1245 +is set to the following value:
     1246 +.Bl -tag -width EINVAL
     1247 +.It Er EINVAL
     1248 +.Va arg
     1249 +is not one of the above legal values.
     1250 +.El
     1251 +.It Dv I_GERROPT
     1252 +Returns the current error mode setting in an
     1253 +.Vt int
     1254 +pointed to by the argument
     1255 +.Fa arg .
     1256 +Error modes are described above for
     1257 +.Dv I_SERROPT .
     1258 +On failure,
     1259 +.Va errno
     1260 +is set to the following value:
     1261 +.Bl -tag -width EFAULT
     1262 +.It Sy EFAULT
     1263 +.Fa arg
     1264 +points outside the allocated address space.
     1265 +.El
     1266 +.El
     1267 +.Pp
1450 1268  The following four commands are used for connecting and disconnecting
1451 1269  multiplexed STREAMS configurations.
1452      -.sp
1453      -.ne 2
1454      -.na
1455      -\fB\fBI_LINK\fR\fR
1456      -.ad
1457      -.RS 13n
1458      -Connects two streams, where \fIfildes\fR is the file descriptor of the stream
1459      -connected to the multiplexing driver, and \fIarg\fR is the file descriptor of
1460      -the stream connected to another driver. The stream designated by \fIarg\fR gets
1461      -connected below the multiplexing driver. \fBI_LINK\fR requires the multiplexing
     1270 +.Bl -tag -width I_PUNLINK
     1271 +.It Dv I_LINK
     1272 +Connects two streams, where
     1273 +.Fa fildes
     1274 +is the file descriptor of the stream
     1275 +connected to the multiplexing driver, and
     1276 +.Fa arg
     1277 +is the file descriptor of the stream connected to another driver.
     1278 +The stream designated by
     1279 +.Va arg
     1280 +gets
     1281 +connected below the multiplexing driver.
     1282 +.Dv I_LINK
     1283 +requires the multiplexing
1462 1284  driver to send an acknowledgement message to the stream head regarding the
1463      -linking operation. This call returns a multiplexor ID number (an identifier
1464      -used to disconnect the multiplexor, see \fBI_UNLINK\fR) on success, and -1 on
1465      -failure. On failure, \fBerrno\fR is set to one of the following values:
1466      -.sp
1467      -.ne 2
1468      -.na
1469      -\fB\fBENXIO\fR\fR
1470      -.ad
1471      -.RS 10n
1472      -Hangup received on \fIfildes\fR.
1473      -.RE
1474      -
1475      -.sp
1476      -.ne 2
1477      -.na
1478      -\fB\fBETIME\fR\fR
1479      -.ad
1480      -.RS 10n
     1285 +linking operation.
     1286 +This call returns a multiplexor ID number (an identifier
     1287 +used to disconnect the multiplexor, see
     1288 +.Dv I_UNLINK )
     1289 +on success, and \(mi1 on failure.
     1290 +On failure,
     1291 +.Va errno
     1292 +is set to one of the following values:
     1293 +.Bl -tag -width EAGAIN
     1294 +.It Er ENXIO
     1295 +Hangup received on
     1296 +.Va fildes .
     1297 +.It Er ETIME
1481 1298  Time out before acknowledgement message was received at stream head.
1482      -.RE
1483      -
1484      -.sp
1485      -.ne 2
1486      -.na
1487      -\fB\fBEAGAIN\fR\fR
1488      -.ad
1489      -.RS 10n
1490      -Temporarily unable to allocate storage to perform the \fBI_LINK.\fR
1491      -.RE
1492      -
1493      -.sp
1494      -.ne 2
1495      -.na
1496      -\fB\fBENOSR\fR\fR
1497      -.ad
1498      -.RS 10n
1499      -Unable to allocate storage to perform the \fBI_LINK\fR due to insufficient
1500      -\fBSTREAMS\fR memory resources.
1501      -.RE
1502      -
1503      -.sp
1504      -.ne 2
1505      -.na
1506      -\fB\fBEBADF\fR\fR
1507      -.ad
1508      -.RS 10n
1509      -\fIarg\fR is not a valid, open file descriptor.
1510      -.RE
1511      -
1512      -.sp
1513      -.ne 2
1514      -.na
1515      -\fB\fBEINVAL\fR\fR
1516      -.ad
1517      -.RS 10n
1518      -\fIfildes\fR stream does not support multiplexing.
1519      -.RE
1520      -
1521      -.sp
1522      -.ne 2
1523      -.na
1524      -\fB\fBEINVAL\fR\fR
1525      -.ad
1526      -.RS 10n
1527      -\fIarg\fR is not a stream, or is already linked under a multiplexor.
1528      -.RE
1529      -
1530      -.sp
1531      -.ne 2
1532      -.na
1533      -\fB\fBEINVAL\fR\fR
1534      -.ad
1535      -.RS 10n
1536      -The specified link operation would cause a ``cycle'' in the resulting
1537      -configuration; that is, a driver would be linked into the multiplexing
1538      -configuration in more than one place.
1539      -.RE
1540      -
1541      -.sp
1542      -.ne 2
1543      -.na
1544      -\fB\fBEINVAL\fR\fR
1545      -.ad
1546      -.RS 10n
1547      -\fIfildes\fR is the file descriptor of a pipe or FIFO.
1548      -.RE
1549      -
1550      -.sp
1551      -.ne 2
1552      -.na
1553      -\fB\fBEINVAL\fR\fR
1554      -.ad
1555      -.RS 10n
1556      -Either the upper or lower stream has a major number >= the maximum major number
1557      -on the system.
1558      -.RE
1559      -
1560      -An \fBI_LINK\fR can also fail while waiting for the multiplexing driver to
     1299 +.It Er EAGAIN
     1300 +Temporarily unable to allocate storage to perform the
     1301 +.Dv I_LINK .
     1302 +.It Er ENOSR
     1303 +Unable to allocate storage to perform the
     1304 +.Dv I_LINK
     1305 +due to insufficient
     1306 +.Sy STREAMS
     1307 +memory resources.
     1308 +.It Er EBADF
     1309 +.Va arg
     1310 +is not a valid, open file descriptor.
     1311 +.It Er EINVAL
     1312 +.Va fildes
     1313 +stream does not support multiplexing.
     1314 +.It Er EINVAL
     1315 +is not a stream, or is already linked under a multiplexor.
     1316 +.It Er EINVAL
     1317 +The specified link operation would cause a
     1318 +.Dq cycle
     1319 +in the resulting configuration; that is, a driver would be linked into the
     1320 +multiplexing configuration in more than one place.
     1321 +.It Er EINVAL
     1322 +.Va fildes
     1323 +is the file descriptor of a pipe or FIFO.
     1324 +.It Er EINVAL
     1325 +Either the upper or lower stream has a major number \(>= the maximum major
     1326 +number on the system.
     1327 +.El
     1328 +.Pp
     1329 +An
     1330 +.Dv I_LINK
     1331 +can also fail while waiting for the multiplexing driver to
1561 1332  acknowledge the link request, if a message indicating an error or a hangup is
1562      -received at the stream head of \fIfildes\fR. In addition, an error code can be
1563      -returned in the positive or negative acknowledgement message.  For these cases,
1564      -\fBI_LINK\fR will fail with \fBerrno\fR set to the value in the message.
1565      -.RE
1566      -
1567      -.sp
1568      -.ne 2
1569      -.na
1570      -\fB\fBI_UNLINK\fR\fR
1571      -.ad
1572      -.RS 13n
1573      -Disconnects the two streams specified by \fIfildes\fR and \fIarg\fR.
1574      -\fIfildes\fR is the file descriptor of the stream connected to the multiplexing
1575      -driver. \fIarg\fR is the multiplexor ID number that was returned by the
1576      -\fBI_LINK\fR. If \fIarg\fR is -1, then all streams that were linked to
1577      -\fIfildes\fR are disconnected.  As in \fBI_LINK\fR, this command requires the
1578      -multiplexing driver to acknowledge the unlink. On failure, \fBerrno\fR is set
1579      -to one of the following values:
1580      -.sp
1581      -.ne 2
1582      -.na
1583      -\fB\fBENXIO\fR\fR
1584      -.ad
1585      -.RS 10n
1586      -Hangup received on \fIfildes\fR.
1587      -.RE
1588      -
1589      -.sp
1590      -.ne 2
1591      -.na
1592      -\fB\fBETIME\fR\fR
1593      -.ad
1594      -.RS 10n
     1333 +received at the stream head of
     1334 +.Fa fildes .
     1335 +In addition, an error code can be
     1336 +returned in the positive or negative acknowledgement message.
     1337 +For these cases,
     1338 +.Dv I_LINK
     1339 +will fail with
     1340 +.Va errno
     1341 +set to the value in the message.
     1342 +.It Dv I_UNLINK
     1343 +Disconnects the two streams specified by
     1344 +.Fa fildes
     1345 +and
     1346 +.Fa arg .
     1347 +.Fa fildes
     1348 +is the file descriptor of the stream connected to the multiplexing
     1349 +driver.
     1350 +.Fa arg
     1351 +is the multiplexor ID number that was returned by the
     1352 +.Dv I_LINK .
     1353 +If
     1354 +.Fa arg
     1355 +is \(mi1, then all streams that were linked to
     1356 +.Fa fildes
     1357 +are disconnected.
     1358 +As in
     1359 +.Dv I_LINK ,
     1360 +this command requires the multiplexing driver to acknowledge the unlink.
     1361 +On failure,
     1362 +.Va errno
     1363 +is set to one of the following values:
     1364 +.Bl -tag -width EINVAL
     1365 +.It Er ENXIO
     1366 +Hangup received on
     1367 +.Va fildes .
     1368 +.It Er ETIME
1595 1369  Time out before acknowledgement message was received at stream head.
1596      -.RE
1597      -
1598      -.sp
1599      -.ne 2
1600      -.na
1601      -\fB\fBENOSR\fR\fR
1602      -.ad
1603      -.RS 10n
1604      -Unable to allocate storage to perform the \fBI_UNLINK\fR due to insufficient
     1370 +.It Er ENOSR
     1371 +Unable to allocate storage to perform the
     1372 +.Dv I_UNLINK
     1373 +due to insufficient
1605 1374  STREAMS memory resources.
1606      -.RE
1607      -
1608      -.sp
1609      -.ne 2
1610      -.na
1611      -\fB\fBEINVAL\fR\fR
1612      -.ad
1613      -.RS 10n
1614      -\fIarg\fR is an invalid multiplexor ID number or \fIfildes\fR is not the stream
1615      -on which the \fBI_LINK\fR that returned \fIarg\fR was performed.
1616      -.RE
1617      -
1618      -.sp
1619      -.ne 2
1620      -.na
1621      -\fB\fBEINVAL\fR\fR
1622      -.ad
1623      -.RS 10n
1624      -\fIfildes\fR is the file descriptor of a pipe or FIFO.
1625      -.RE
1626      -
1627      -An  \fBI_UNLINK\fR can also fail while waiting for the multiplexing driver to
     1375 +.It Er EINVAL
     1376 +.Fa arg
     1377 +is an invalid multiplexor ID number or
     1378 +.Fa fildes
     1379 +is not the stream on which the
     1380 +.Dv I_LINK
     1381 +that returned
     1382 +.Fa arg
     1383 +was performed.
     1384 +.It Er EINVAL
     1385 +.Fa fildes
     1386 +is the file descriptor of a pipe or FIFO.
     1387 +.El
     1388 +.Pp
     1389 +An
     1390 +.Dv I_UNLINK
     1391 +can also fail while waiting for the multiplexing driver to
1628 1392  acknowledge the link request, if a message indicating an error or a hangup is
1629      -received at the stream head of \fIfildes\fR. In addition, an error code can be
1630      -returned in the positive or negative acknowledgement message. For these cases,
1631      -\fBI_UNLINK\fR will fail with \fBerrno\fR set to the value in the message.
1632      -.RE
1633      -
1634      -.sp
1635      -.ne 2
1636      -.na
1637      -\fB\fBI_PLINK\fR\fR
1638      -.ad
1639      -.RS 13n
1640      -Connects two streams, where \fIfildes\fR is the file descriptor of the stream
1641      -connected to the multiplexing driver, and \fIarg\fR is the file descriptor of
1642      -the stream connected to another driver. The stream designated by \fIarg\fR gets
1643      -connected via a persistent link below the multiplexing driver. \fBI_PLINK\fR
     1393 +received at the stream head of
     1394 +.Fa fildes .
     1395 +In addition, an error code can be
     1396 +returned in the positive or negative acknowledgement message.
     1397 +For these cases,
     1398 +.Dv I_UNLINK
     1399 +will fail with
     1400 +.Va errno
     1401 +set to the value in the message.
     1402 +.It Dv I_PLINK
     1403 +Connects two streams, where
     1404 +.Fa fildes
     1405 +is the file descriptor of the stream
     1406 +connected to the multiplexing driver, and
     1407 +.Fa arg
     1408 +is the file descriptor of
     1409 +the stream connected to another driver.
     1410 +The stream designated by
     1411 +.Fa arg
     1412 +gets
     1413 +connected via a persistent link below the multiplexing driver.
     1414 +.Dv I_PLINK
1644 1415  requires the multiplexing driver to send an acknowledgement message to the
1645      -stream head regarding the linking operation. This call creates a persistent
1646      -link that continues to exist even if the file descriptor \fIfildes\fR
1647      -associated with the upper stream to the multiplexing driver is closed. This
     1416 +stream head regarding the linking operation.
     1417 +This call creates a persistent
     1418 +link that continues to exist even if the file descriptor
     1419 +.Fa fildes
     1420 +associated with the upper stream to the multiplexing driver is closed.
     1421 +This
1648 1422  call returns a multiplexor ID number (an identifier that may be used to
1649      -disconnect the multiplexor, see \fBI_PUNLINK\fR) on success, and -1 on failure.
1650      -On failure, \fBerrno\fR is set to one of the following values:
1651      -.sp
1652      -.ne 2
1653      -.na
1654      -\fB\fBENXIO\fR\fR
1655      -.ad
1656      -.RS 10n
1657      -Hangup received on \fIfildes\fR.
1658      -.RE
1659      -
1660      -.sp
1661      -.ne 2
1662      -.na
1663      -\fB\fBETIME\fR\fR
1664      -.ad
1665      -.RS 10n
     1423 +disconnect the multiplexor, see
     1424 +.Dv I_PUNLINK )
     1425 +on success, and \(mi1 on failure.
     1426 +On failure,
     1427 +.Va errno
     1428 +is set to one of the following values:
     1429 +.Bl -tag -width EAGAIN
     1430 +.It Er ENXIO
     1431 +Hangup received on
     1432 +.Fa fildes .
     1433 +.It Er ETIME
1666 1434  Time out before acknowledgement message was received at the stream head.
1667      -.RE
1668      -
1669      -.sp
1670      -.ne 2
1671      -.na
1672      -\fB\fBEAGAIN\fR\fR
1673      -.ad
1674      -.RS 10n
1675      -Unable to allocate STREAMS storage to perform the  \fBI_PLINK.\fR
1676      -.RE
1677      -
1678      -.sp
1679      -.ne 2
1680      -.na
1681      -\fB\fBEBADF\fR\fR
1682      -.ad
1683      -.RS 10n
1684      -\fIarg\fR is not a valid, open file descriptor.
1685      -.RE
1686      -
1687      -.sp
1688      -.ne 2
1689      -.na
1690      -\fB\fBEINVAL\fR\fR
1691      -.ad
1692      -.RS 10n
1693      -\fIfildes\fR does not support multiplexing.
1694      -.RE
1695      -
1696      -.sp
1697      -.ne 2
1698      -.na
1699      -\fB\fBEINVAL\fR\fR
1700      -.ad
1701      -.RS 10n
1702      -\fIarg\fR is not a stream or is already linked under a multiplexor.
1703      -.RE
1704      -
1705      -.sp
1706      -.ne 2
1707      -.na
1708      -\fB\fBEINVAL\fR\fR
1709      -.ad
1710      -.RS 10n
1711      -The specified link operation would cause a ``cycle'' in the resulting
1712      -configuration; that is, if a driver would be linked into the multiplexing
1713      -configuration in more than one place.
1714      -.RE
1715      -
1716      -.sp
1717      -.ne 2
1718      -.na
1719      -\fB\fBEINVAL\fR\fR
1720      -.ad
1721      -.RS 10n
1722      -\fIfildes\fR is the file descriptor of a pipe or FIFO.
1723      -.RE
1724      -
1725      -An \fBI_PLINK\fR can also fail while waiting for the multiplexing driver to
     1435 +.It Er EAGAIN
     1436 +Unable to allocate STREAMS storage to perform the
     1437 +.Dv I_PLINK .
     1438 +.It Er EBADF
     1439 +.Va arg
     1440 +is not a valid, open file descriptor.
     1441 +.It Er EINVAL
     1442 +.Va fildes
     1443 +does not support multiplexing.
     1444 +.It Er EINVAL
     1445 +.Va arg
     1446 +is not a stream or is already linked under a multiplexor.
     1447 +.It Er EINVAL
     1448 +The specified link operation would cause a
     1449 +.Dq cycle
     1450 +in the resulting configuration; that is, if a driver would be linked into the
     1451 +multiplexing configuration in more than one place.
     1452 +.It Er EINVAL
     1453 +.Fa fildes
     1454 +is the file descriptor of a pipe or FIFO.
     1455 +.El
     1456 +.Pp
     1457 +An
     1458 +.Dv I_PLINK
     1459 +can also fail while waiting for the multiplexing driver to
1726 1460  acknowledge the link request, if a message indicating an error on a hangup is
1727      -received at the stream head of \fIfildes\fR. In addition, an error code can be
1728      -returned in the positive or negative acknowledgement message.  For these cases,
1729      -\fBI_PLINK\fR will fail with \fBerrno\fR set to the value in the message.
1730      -.RE
1731      -
1732      -.sp
1733      -.ne 2
1734      -.na
1735      -\fB\fBI_PUNLINK\fR\fR
1736      -.ad
1737      -.RS 13n
1738      -Disconnects the two streams specified by \fIfildes\fR and \fIarg\fR that are
1739      -connected with a persistent link. \fIfildes\fR is the file descriptor of the
1740      -stream connected to the multiplexing driver. \fIarg\fR is the multiplexor ID
1741      -number that was returned by \fBI_PLINK\fR when a stream was linked below the
1742      -multiplexing driver. If \fIarg\fR is  \fBMUXID_ALL\fR then all streams that are
1743      -persistent links to \fIfildes\fR are disconnected. As in  \fBI_PLINK,\fR this
1744      -command requires the multiplexing driver to acknowledge the unlink. On failure,
1745      -\fBerrno\fR is set to one of the following values:
1746      -.sp
1747      -.ne 2
1748      -.na
1749      -\fB\fBENXIO\fR\fR
1750      -.ad
1751      -.RS 10n
1752      -Hangup received on \fIfildes\fR.
1753      -.RE
1754      -
1755      -.sp
1756      -.ne 2
1757      -.na
1758      -\fB\fBETIME\fR\fR
1759      -.ad
1760      -.RS 10n
     1461 +received at the stream head of
     1462 +.Fa fildes .
     1463 +In addition, an error code can be
     1464 +returned in the positive or negative acknowledgement message.
     1465 +For these cases,
     1466 +.Dv I_PLINK
     1467 +will fail with
     1468 +.Va errno
     1469 +set to the value in the message.
     1470 +.It Dv I_PUNLINK
     1471 +Disconnects the two streams specified by
     1472 +.Fa fildes
     1473 +and
     1474 +.Fa arg
     1475 +that are
     1476 +connected with a persistent link.
     1477 +.Fa fildes
     1478 +is the file descriptor of the
     1479 +stream connected to the multiplexing driver.
     1480 +.Fa arg
     1481 +is the multiplexor ID number that was returned by
     1482 +.Dv I_PLINK
     1483 +when a stream was linked below the multiplexing driver.
     1484 +If
     1485 +.Fa arg
     1486 +is
     1487 +.Dv MUXID_ALL
     1488 +then all streams that are persistent links to
     1489 +.Fa fildes
     1490 +are disconnected.
     1491 +As in
     1492 +.Dv I_PLINK ,
     1493 +this command requires the multiplexing driver to acknowledge the unlink.
     1494 +On failure,
     1495 +.Va errno
     1496 +is set to one of the following values:
     1497 +.Bl -tag -width EAGAIN
     1498 +.It Sy ENXIO
     1499 +Hangup received on
     1500 +.Fa fildes .
     1501 +.It Er ETIME
1761 1502  Time out before acknowledgement message was received at the stream head.
1762      -.RE
1763      -
1764      -.sp
1765      -.ne 2
1766      -.na
1767      -\fB\fBEAGAIN\fR\fR
1768      -.ad
1769      -.RS 10n
     1503 +.It Er EAGAIN
1770 1504  Unable to allocate buffers for the acknowledgement message.
1771      -.RE
1772      -
1773      -.sp
1774      -.ne 2
1775      -.na
1776      -\fB\fBEINVAL\fR\fR
1777      -.ad
1778      -.RS 10n
     1505 +.It Er EINVAL
1779 1506  Invalid multiplexor ID number.
1780      -.RE
1781      -
1782      -.sp
1783      -.ne 2
1784      -.na
1785      -\fB\fBEINVAL\fR\fR
1786      -.ad
1787      -.RS 10n
1788      -\fIfildes\fR is the file descriptor of a pipe or FIFO.
1789      -.RE
1790      -
1791      -An \fBI_PUNLINK\fR can also fail while waiting for the multiplexing driver to
     1507 +.It Er EINVAL
     1508 +.Fa fildes
     1509 +is the file descriptor of a pipe or FIFO.
     1510 +.El
     1511 +.Pp
     1512 +An
     1513 +.Dv I_PUNLINK
     1514 +can also fail while waiting for the multiplexing driver to
1792 1515  acknowledge the link request if a message indicating an error or a hangup is
1793      -received at the stream head of \fIfildes\fR. In addition, an error code can be
1794      -returned in the positive or negative acknowledgement message.  For these cases,
1795      -\fBI_PUNLINK\fR will fail with \fBerrno\fR set to the value in the message.
1796      -.RE
1797      -
1798      -.SH RETURN VALUES
1799      -.sp
1800      -.LP
1801      -Unless specified otherwise above, the return value from \fBioctl()\fR is
1802      -\fB0\fR upon success and  \fB\(mi1\fR upon failure, with \fIerrno\fR set as
1803      -indicated.
1804      -.SH SEE ALSO
1805      -.sp
1806      -.LP
1807      -\fBIntro\fR(3), \fBclose\fR(2), \fBfcntl\fR(2), \fBgetmsg\fR(2),
1808      -\fBioctl\fR(2), \fBopen\fR(2), \fBpoll\fR(2), \fBputmsg\fR(2), \fBread\fR(2),
1809      -\fBwrite\fR(2), \fBsignal\fR(3C), \fBsignal.h\fR(3HEAD),
1810      -.sp
1811      -.LP
1812      -\fISTREAMS Programming Guide\fR
     1516 +received at the stream head of
     1517 +.Fa fildes .
     1518 +In addition, an error code can be
     1519 +returned in the positive or negative acknowledgement message.
     1520 +For these cases,
     1521 +.Dv I_PUNLINK
     1522 +will fail with
     1523 +.Va errno
     1524 +set to the value in the message.
     1525 +.El
     1526 +.Sh RETURN VALUES
     1527 +Unless specified otherwise above, the return value from
     1528 +.Xr ioctl 2
     1529 +is
     1530 +.Sy 0
     1531 +upon success and
     1532 +.Sy \(mi1
     1533 +upon failure, with
     1534 +.Va errno
     1535 +set as indicated.
     1536 +.Sh SEE ALSO
     1537 +.Xr close 2 ,
     1538 +.Xr fcntl 2 ,
     1539 +.Xr getmsg 2 ,
     1540 +.Xr ioctl 2 ,
     1541 +.Xr open 2 ,
     1542 +.Xr poll 2 ,
     1543 +.Xr putmsg 2 ,
     1544 +.Xr read 2 ,
     1545 +.Xr write 2 ,
     1546 +.Xr Intro 3 ,
     1547 +.Xr signal 3C ,
     1548 +.Xr signal.h 3HEAD
     1549 +.Pp
     1550 +.%B STREAMS Programming Guide
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX