streamio(7) streamio(7)
NAME
streamio - STREAMS ioctl commands
SYNOPSIS
#include <sys/types.h>
#include <stropts.h>
int ioctl(int fildes, int command, ... /* arg */);
DESCRIPTION
STREAMS ioctl commands are a subset of the ioctl(2) system calls which
perform a variety of control functions on streams.
fildes is an open file descriptor that refers to a stream. command
determines the control function to be performed as described below.
arg represents additional information that is needed by this command.
The type of arg depends upon the command, but it is generally an
integer or a pointer to a command-specific data structure. The command
and arg are interpreted by the stream head. Certain combinations of
these arguments may be passed to a module or driver in the stream.
Since these STREAMS commands are a subset of ioctl, they are subject
to the errors described there. In addition to those errors, the call
will fail with errno set to EINVAL, without processing a control func-
tion, if the stream referenced by fildes is linked below a multi-
plexer, or if command is not a valid value for a stream.
Also, as described in ioctl, STREAMS modules and drivers can detect
errors. In this case, the module or driver sends an error message to
the stream head containing an error value. This causes subsequent sys-
tem calls to fail with errno set to this value.
COMMAND FUNCTIONS
The following ioctl commands, with error values indicated, are appli-
cable to all STREAMS files:
IPUSH Pushes the module whose name is pointed to by arg onto
the top of the current stream, just below the stream
head. If the stream is a pipe, the module will be
inserted between the stream heads of both ends of the
pipe. It then calls the open routine of the newly-pushed
module. On failure, errno is set to one of the following
values:
EINVAL Invalid module name.
EFAULT arg points outside the allocated address
space.
ENXIO Open routine of new module failed.
ENXIO Hangup received on fildes.
Page 1 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
IPOP Removes the module just below the stream head of the
stream pointed to by fildes. To remove a module from a
pipe requires that the module was pushed on the side it
is being removed from. arg should be 0 in an IPOP
request. On failure, errno is set to one of the following
values:
EINVAL No module present in the stream.
ENXIO Hangup received on fildes.
ILOOK Retrieves the name of the module just below the stream
head of the stream pointed to by fildes, and places it in
a null terminated character string pointed at by arg. The
buffer pointed to by arg should be at least FMNAMESZ+1
bytes long. An (#include <sys/conf.h>) declaration is
required. On failure, errno is set to one of the follow-
ing values:
EFAULT arg points outside the allocated address
space.
EINVAL No module present in stream.
IFLUSH This request flushes all input and/or output queues,
depending on the value of arg. Legal arg values are:
FLUSHR Flush read queues.
FLUSHW Flush write queues.
FLUSHRW Flush read and write queues.
If a pipe or FIFO does not have any modules pushed, the
read queue of the stream head on either end is flushed
depending on the value of arg.
If FLUSHR is set and fildes is a pipe, the read queue for
that end of the pipe is flushed and the write queue for
the other end is flushed. If fildes is a FIFO, both
queues are flushed.
If FLUSHW is set and fildes is a pipe and the other end
of the pipe exists, the read queue for the other end of
the pipe is flushed and the write queue for this end is
flushed. If fildes is a FIFO, both queues of the FIFO are
flushed.
If FLUSHRW is set, all read queues are flushed, that is,
the read queue for the FIFO and the read queue on both
ends of the pipe are flushed.
Page 2 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
Correct flush handling of a pipe or FIFO with modules
pushed is achieved via the pipemod module. This module
should be the first module pushed onto a pipe so that it
is at the midpoint of the pipe itself.
On failure, errno is set to one of the following values:
ENOSR Unable to allocate buffers for flush message
due to insufficient STREAMS memory
resources.
EINVAL Invalid arg value.
ENXIO Hangup received on fildes.
IFLUSHBAND Flushes a particular band of messages. arg points to a
bandinfo structure that has the following members:
unsigned char bipri;
int biflag;
The biflag field may be one of FLUSHR, FLUSHW, or
FLUSHRW as described earlier.
ISETSIG Informs the stream head that the user wishes the kernel
to issue the SIGPOLL signal [see signal(2)] when a par-
ticular event has occurred on the stream associated with
fildes. ISETSIG supports an asynchronous processing
capability in STREAMS. The value of arg is a bitmask that
specifies the events for which the user should be sig-
naled. It is the bitwise-OR of any combination of the
following constants:
SINPUT Any message other than an MPCPROTO has
arrived in a stream head read queue. This
event is maintained for compatibility with
prior UNIX System V releases. This is set
even if the message is of zero length.
SRDNORM An ordinary (non-priority) message has
arrived in a stream head read queue. This is
set even if the message is of zero length.
SRDBAND A priority band message (band > 0) has
arrived in a stream head read queue. This is
set even if the message is of zero length.
SHIPRI A high priority message is present in the
stream head read queue. This is set even if
the message is of zero length.
Page 3 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
SOUTPUT The write queue just below the stream head
is no longer full. This notifies the user
that there is room in the queue for sending
(or writing) data downstream.
SWRNORM This event is the same as SOUTPUT.
SWRBAND A priority band greater than 0 of a queue
downstream exists and is writable. This
notifies the user that there is room in the
queue for sending (or writing) priority data
downstream.
SMSG A STREAMS signal message that contains the
SIGPOLL signal has reached the front of the
stream head read queue.
SERROR An MERROR message has reached the stream
head.
SHANGUP An MHANGUP message has reached the stream
head.
SBANDURG When used in conjunction with SRDBAND,
SIGURG is generated instead of SIGPOLL when
a priority message reaches the front of the
stream head read queue.
A user process may choose to be signaled only of high
priority messages by setting the arg bitmask to the value
SHIPRI.
Processes that wish to receive SIGPOLL signals must
explicitly register to receive them using ISETSIG. If
several processes register to receive this signal for the
same event on the same stream, each process will be sig-
naled when the event occurs.
If the value of arg is zero, the calling process will be
unregistered and will not receive further SIGPOLL sig-
nals. On failure, errno is set to one of the following
values:
EINVAL arg value is invalid or arg is zero and pro-
cess is not registered to receive the
SIGPOLL signal.
EAGAIN Allocation of a data structure to store the
signal request failed.
Page 4 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
IGETSIG Returns the events for which the calling process is
currently registered to be sent a SIGPOLL signal. The
events are returned as a bitmask pointed to by arg, where
the events are those specified in the description of
ISETSIG above. On failure, errno is set to one of the
following values:
EINVAL Process not registered to receive the
SIGPOLL signal.
EFAULT arg points outside the allocated address
space.
IFIND Compares the names of all modules currently present in
the stream to the name pointed to by arg, and returns 1
if the named module is present in the stream. It returns
0 if the named module is not present. On failure, errno
is set to one of the following values:
EFAULT arg points outside the allocated address
space.
EINVAL arg does not contain a valid module name.
IPEEK Allows a user to retrieve the information in the first
message in the stream head read queue without taking the
message off the queue. IPEEK is analogous to getmsg(2)
except that it does not remove the message from the
queue. arg points to a strpeek structure which contains
the following members:
struct strbuf ctlbuf;
struct strbuf databuf;
long flags;
The maxlen field in the ctlbuf and databuf strbuf struc-
tures [see getmsg(2)] must be set to the number of bytes
of control information and/or data information, respec-
tively, to retrieve. flags may be set to RSHIPRI or 0.
If RSHIPRI is set, IPEEK will look for a high priority
message in the stream head read queue. Otherwise, IPEEK
will look for the first message on the stream head read
queue.
IPEEK returns 1 if a message was retrieved, and returns
0 if no message was found in the stream head read queue.
It does not wait for a message to arrive. On return,
ctlbuf specifies information in the control buffer,
databuf specifies information in the data buffer, and
flags contains the value RSHIPRI or 0. On failure, errno
is set to the following value:
Page 5 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
EFAULT arg points, or the buffer area specified in
ctlbuf or databuf is, outside the allocated
address space.
EBADMSG Queued message to be read is not valid for
IPEEK.
EINVAL Illegal value for flags.
ISRDOPT Sets the read mode [see read(2)] using the value of the
argument arg. Legal arg values are:
RNORM Byte-stream mode, the default.
RMSGD Message-discard mode.
RMSGN Message-nondiscard mode.
In addition, treatment of control messages by the stream
head may be changed by setting the following flags in
arg:
RPROTNORM Fail read() with EBADMSG if a control mes-
sage is at the front of the stream head read
queue.
RPROTDAT Deliver the control portion of a message as
data when a user issues read(). This is the
default behavior.
RPROTDIS Discard the control portion of a message,
delivering any data portion, when a user
issues a read().
On failure, errno is set to the following value:
EINVAL arg is not one of the above legal values.
IGRDOPT Returns the current read mode setting in an int pointed
to by the argument arg. Read modes are described in
read(2). On failure, errno is set to the following value:
EFAULT arg points outside the allocated address space.
INREAD Counts the number of data bytes in data blocks in the
first message in the stream head read queue, and places
this value in the location pointed to by arg. The return
value for the command is the number of messages in the
stream head read queue. For example, if zero is returned
in arg, but the ioctl return value is greater than zero,
this indicates that a zero-length message is next in the
queue. On failure, errno is set to the following value:
Page 6 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
EFAULT arg points outside the allocated address
space.
IFDINSERT Creates a message from user specified buffer(s), adds
information about another stream and sends the message
downstream. The message contains a control part and an
optional data part. The data and control parts to be sent
are distinguished by placement in separate buffers, as
described below.
arg points to a strfdinsert structure which contains the
following members:
struct strbuf ctlbuf;
struct strbuf databuf;
long flags;
int fildes;
int offset;
The len field in the ctlbuf strbuf structure [see
putmsg(2)] must be set to the size of a pointer plus the
number of bytes of control information to be sent with
the message. fildes in the strfdinsert structure speci-
fies the file descriptor of the other stream. offset,
which must be word-aligned, specifies the number of bytes
beyond the beginning of the control buffer where
IFDINSERT will store a pointer. This pointer will be the
address of the read queue structure of the driver for the
stream corresponding to fildes in the strfdinsert struc-
ture. The len field in the databuf strbuf structure must
be set to the number of bytes of data information to be
sent with the message or zero if no data part is to be
sent.
flags specifies the type of message to be created. An
ordinary (non-priority) message is created if flags is
set to 0, a high priority message is created if flags is
set to RSHIPRI. For normal messages, IFDINSERT will
block if the stream write queue is full due to internal
flow control conditions. For high priority messages,
IFDINSERT does not block on this condition. For normal
messages, IFDINSERT does not block when the write queue
is full and ONDELAY or ONONBLOCK is set. Instead, it
fails and sets errno to EAGAIN.
IFDINSERT also blocks, unless prevented by lack of
internal resources, waiting for the availability of mes-
sage blocks, regardless of priority or whether ONDELAY
or ONONBLOCK has been specified. No partial message is
sent. On failure, errno is set to one of the following
values:
Page 7 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
EAGAIN A non-priority message was specified, the
ONDELAY or ONONBLOCK flag is set, and the
stream write queue is full due to internal
flow control conditions.
ENOSR Buffers could not be allocated for the mes-
sage that was to be created due to insuffi-
cient STREAMS memory resources.
EFAULT arg points, or the buffer area specified in
ctlbuf or databuf is, outside the allocated
address space.
EINVAL One of the following: fildes in the
strfdinsert structure is not a valid, open
stream file descriptor; the size of a
pointer plus offset is greater than the len
field for the buffer specified through
ctlptr; offset does not specify a properly-
aligned location in the data buffer; an
undefined value is stored in flags.
ENXIO Hangup received on fildes of the ioctl call
or fildes in the strfdinsert structure.
ERANGE The len field for the buffer specified
through databuf does not fall within the
range specified by the maximum and minimum
packet sizes of the topmost stream module,
or the len field for the buffer specified
through databuf is larger than the maximum
configured size of the data part of a mes-
sage, or the len field for the buffer speci-
fied through ctlbuf is larger than the max-
imum configured size of the control part of
a message.
IFDINSERT can also fail if an error message was received
by the stream head of the stream corresponding to fildes
in the strfdinsert structure. In this case, errno will be
set to the value in the message.
Page 8 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
ISTR Constructs an internal STREAMS ioctl message from the
data pointed to by arg, and sends that message down-
stream.
This mechanism is provided to send user ioctl requests to
downstream modules and drivers. It allows information to
be sent with the ioctl, and will return to the user any
information sent upstream by the downstream recipient.
ISTR blocks until the system responds with either a
positive or negative acknowledgement message, or until
the request "times out" after some period of time. If the
request times out, it fails with errno set to ETIME.
At most, one ISTR can be active on a stream. Further
ISTR calls will block until the active ISTR completes
at the stream head. The default timeout interval for
these requests is 15 seconds. The ONDELAY and ONONBLOCK
[see open(2)] flags have no effect on this call.
To send requests downstream, arg must point to a strioctl
structure which contains the following members:
int iccmd;
int ictimout;
int iclen;
char *icdp;
iccmd is the internal ioctl command intended for a down-
stream module or driver and ictimout is the number of
seconds (-1 = infinite, 0 = use default, > 0 = as speci-
fied) an ISTR request will wait for acknowledgement
before timing out. The default timeout is infinite.
iclen is the number of bytes in the data argument and
icdp is a pointer to the data argument. The iclen field
has two uses: on input, it contains the length of the
data argument passed in, and on return from the command,
it contains the number of bytes being returned to the
user (the buffer pointed to by icdp should be large
enough to contain the maximum amount of data that any
module or the driver in the stream can return).
The stream head will convert the information pointed to
by the strioctl structure to an internal ioctl command
message and send it downstream. On failure, errno is set
to one of the following values:
ENOSR Unable to allocate buffers for the ioctl
message due to insufficient STREAMS memory
resources.
Page 9 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
EFAULT arg points, or the buffer area specified by
icdp and iclen (separately for data sent
and data returned) is, outside the allocated
address space.
EINVAL iclen is less than 0 or iclen is larger
than the maximum configured size of the data
part of a message or ictimout is less than
-1.
ENXIO Hangup received on fildes.
ETIME A downstream ioctl timed out before ack-
nowledgement was received.
An ISTR can also fail while waiting for an acknowledge-
ment if a message indicating an error or a hangup is
received at the stream head. In addition, an error code
can be returned in the positive or negative acknowledge-
ment message, in the event the ioctl command sent down-
stream fails. For these cases, ISTR will fail with errno
set to the value in the message.
ISWROPT Sets the write mode using the value of the argument arg.
Legal bit settings for arg are:
SNDZERO Send a zero-length message downstream when a
write of 0 bytes occurs.
To not send a zero-length message when a write of 0 bytes
occurs, this bit must not be set in arg.
On failure, errno may be set to the following value:
EINVAL arg is the the above legal value.
IGWROPT Returns the current write mode setting, as described
above, in the int that is pointed to by the argument arg.
ISENDFD Requests the stream associated with fildes to send a mes-
sage, containing a file pointer, to the stream head at
the other end of a stream pipe. The file pointer corre-
sponds to arg, which must be an open file descriptor.
ISENDFD converts arg into the corresponding system file
pointer. It allocates a message block and inserts the
file pointer in the block. The user id and group id asso-
ciated with the sending process are also inserted. This
message is placed directly in the read queue of the
stream head at the other end of the stream pipe to which
it is connected. On failure, errno is set to one of the
following values:
Page 10 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
EAGAIN The sending stream is unable to allocate a
message block to contain the file pointer.
EAGAIN The read queue of the receiving stream head
is full and cannot accept the message sent
by ISENDFD.
EBADF arg is not a valid, open file descriptor.
EINVAL fildes is not connected to a stream pipe.
ENXIO Hangup received on fildes.
IRECVFD Retrieves the file descriptor associated with the message
sent by an ISENDFD ioctl over a stream pipe. arg is a
pointer to a data buffer large enough to hold an
strrecvfd data structure containing the following
members:
int fd;
uidt uid;
gidt gid;
char fill[8];
fd is an integer file descriptor. uid and gid are the
user id and group id, respectively, of the sending
stream.
If ONDELAY and ONONBLOCK are clear [see open(2)],
IRECVFD will block until a message is present at the
stream head. If ONDELAY or ONONBLOCK is set, IRECVFD
will fail with errno set to EAGAIN if no message is
present at the stream head.
If the message at the stream head is a message sent by an
ISENDFD, a new user file descriptor is allocated for the
file pointer contained in the message. The new file
descriptor is placed in the fd field of the strrecvfd
structure. The structure is copied into the user data
buffer pointed to by arg. On failure, errno is set to one
of the following values:
EAGAIN A message is not present at the stream head
read queue, and the ONDELAY or ONONBLOCK
flag is set.
EBADMSG The message at the stream head read queue is
not a message containing a passed file
descriptor.
EFAULT arg points outside the allocated address
space.
Page 11 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
EMFILE NOFILES file descriptors are currently open.
ENXIO Hangup received on fildes.
EOVERFLOW uid or gid is too large to be stored in the
structure pointed to by arg.
ILIST Allows the user to list all the module names on the
stream, up to and including the topmost driver name. If
arg is NULL, the return value is the number of modules,
including the driver, that are on the stream pointed to
by fildes. This allows the user to allocate enough space
for the module names. If arg is non-NULL, it should point
to an strlist structure that has the following members:
int slnmods;
struct strmlist *slmodlist;
The strmlist structure has the following member:
char lname[FMNAMESZ+1];
slnmods indicates the number of entries the user has
allocated in the array and on return, slmodlist contains
the list of module names. The return value indicates the
number of entries that have been filled in. On failure,
errno may be set to one of the following values:
EINVAL The slnmods member is less than 1.
EAGAIN Unable to allocate buffers
IATMARK Allows the user to see if the current message in the
stream head read queue is "marked" by some module down-
stream. arg determines how the checking is done when
there may be multiple marked messages in the stream head
read queue. It may take the following values:
ANYMARK Check if the message is marked.
LASTMARK Check if the message is the last one marked
in the queue.
The return value is 1 if the mark condition is satisfied
and 0 otherwise. On failure, errno may be set to the fol-
lowing value:
EINVAL Invalid arg value.
Page 12 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
ICKBAND Check if the message of a given priority band exists in
the stream head read queue. This returns 1 if a message
of a given priority exists, or -1 on error. arg should be
an integer containing the value of the priority band in
question. On failure, errno may be set to the following
value:
EINVAL Invalid arg value.
IGETBAND Returns the priority band of the first message in the
stream head read queue in the integer referenced by arg.
On failure, errno may be set to the following value:
ENODATA No message in the stream head read queue.
ICANPUT Check if a certain band is writable. arg is set to the
priority band in question. The return value is 0 if the
priority band arg is flow controlled, 1 if the band is
writable, or -1 on error. On failure, errno may be set to
the following value:
EINVAL Invalid arg value.
ISETCLTIME Allows the user to set the time the stream head will
delay when a stream is closing and there is data in the
write queues. Before closing each module and driver, the
stream head will delay for the specified amount of time
to allow the data to drain. If, after the delay, there is
still data present, it will be flushed. arg is the number
of milliseconds to delay, rounded up to the nearest legal
value on the system. The default is fifteen seconds. On
failure, errno may be set to the following value:
EINVAL Invalid arg value.
IGETCLTIME Returns the close time delay in the integer pointed by
arg.
The following four commands are used for connecting and disconnecting
multiplexed STREAMS configurations.
ILINK Connects two streams, where fildes is the file descriptor
of the stream connected to the multiplexing driver, and
arg is the file descriptor of the stream connected to
another driver. The stream designated by arg gets con-
nected below the multiplexing driver. ILINK requires the
multiplexing driver to send an acknowledgement message to
the stream head regarding the linking operation. This
call returns a multiplexer ID number (an identifier used
to disconnect the multiplexer, see IUNLINK) on success,
and a -1 on failure. On failure, errno is set to one of
the following values:
Page 13 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
ENXIO Hangup received on fildes.
ETIME Time out before acknowledgement message was
received at stream head.
EAGAIN Temporarily unable to allocate storage to
perform the ILINK.
ENOSR Unable to allocate storage to perform the
ILINK due to insufficient STREAMS memory
resources.
EBADF arg is not a valid, open file descriptor.
EINVAL fildes stream does not support multiplexing.
EINVAL arg is not a stream, or is already linked
under a multiplexer.
EINVAL The specified link operation would cause a
"cycle" in the resulting configuration; that
is, if a given driver is linked into a multi-
plexing configuration in more than one place.
EINVAL fildes is the file descriptor of a pipe or
FIFO.
An ILINK can also fail while waiting for the multiplex-
ing driver to acknowledge the link request, if a message
indicating an error or a hangup is received at the stream
head of fildes. In addition, an error code can be
returned in the positive or negative acknowledgement mes-
sage. For these cases, ILINK will fail with errno set to
the value in the message.
IUNLINK Disconnects the two streams specified by fildes and arg.
fildes is the file descriptor of the stream connected to
the multiplexing driver. arg is the multiplexer ID number
that was returned by the ILINK. If arg is -1, then all
streams which were linked to fildes are disconnected. As
in ILINK, this command requires the multiplexing driver
to acknowledge the unlink. On failure, errno is set to
one of the following values:
ENXIO Hangup received on fildes.
ETIME Time out before acknowledgement message was
received at stream head.
ENOSR Unable to allocate storage to perform the
IUNLINK due to insufficient STREAMS memory
resources.
Page 14 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
EINVAL arg is an invalid multiplexer ID number or
fildes is not the stream on which the ILINK
that returned arg was performed.
EINVAL fildes is the file descriptor of a pipe or
FIFO.
An IUNLINK can also fail while waiting for the multi-
plexing driver to acknowledge the link request, if a mes-
sage indicating an error or a hangup is received at the
stream head of fildes. In addition, an error code can be
returned in the positive or negative acknowledgement mes-
sage. For these cases, IUNLINK will fail with errno set
to the value in the message.
IPLINK Connects two streams, where fildes is the file descriptor
of the stream connected to the multiplexing driver, and
arg is the file descriptor of the stream connected to
another driver. The stream designated by arg is connected
via a persistent link below the multiplexing driver.
IPLINK requires the multiplexing driver to send an ack-
nowledgement message to the stream head regarding the
linking operation. This call creates a persistent link
which can exist even if the file descriptor fildes asso-
ciated with the upper stream to the multiplexing driver
is closed. This call returns a multiplexer ID number (an
identifier that may be used to disconnect the multi-
plexer, see IPUNLINK) on success, and a -1 on failure.
On failure, errno may be set to one of the following
values:
ENXIO Hangup received on fildes.
ETIME Time out before acknowledgement message was
received at the stream head.
EAGAIN Unable to allocate STREAMS storage to per-
form the IPLINK.
EBADF arg is not a valid, open file descriptor.
EINVAL fildes does not support multiplexing.
EINVAL arg is not a stream or is already linked
under a multiplexer.
EINVAL The specified link operation would cause a
"cycle" in the resulting configuration; that
is, if a given stream head is linked into a
multiplexing configuration in more than one
place.
Page 15 Reliant UNIX 5.44 Printed 11/98
streamio(7) streamio(7)
EINVAL fildes is the file descriptor of a pipe or
FIFO.
An IPLINK can also fail while waiting for the multiplex-
ing driver to acknowledge the link request, if a message
indicating an error on a hangup is received at the stream
head of fildes. In addition, an error code can be
returned in the positive or negative acknowledgement mes-
sage. For these cases, IPLINK will fail with errno set
to the value in the message.
IPUNLINK Disconnects the two streams specified by fildes and arg
that are connected with a persistent link. fildes is the
file descriptor of the stream connected to the multiplex-
ing driver. arg is the multiplexer ID number that was
returned by IPLINK when a stream was linked below the
multiplexing driver. If arg is MUXIDALL then all streams
which are persistent links to fildes are disconnected. As
in IPLINK, this command requires the multiplexing driver
to acknowledge the unlink. On failure, errno may be set
to one of the following values:
ENXIO Hangup received on fildes.
ETIME Time out before acknowledgement message was
received at the stream head.
EAGAIN Unable to allocate buffers for the ack-
nowledgement message.
EINVAL Invalid multiplexer ID number.
EINVAL fildes is the file descriptor of a pipe or
FIFO.
An IPUNLINK can also fail while waiting for the multi-
plexing driver to acknowledge the link request if a mes-
sage indicating an error or a hangup is received at the
stream head of fildes. In addition, an error code can be
returned in the positive or negative acknowledgement mes-
sage. For these cases, IPUNLINK will fail with errno set
to the value in the message.
DIAGNOSTICS
Unless specified otherwise above, the return value from ioctl is 0
upon success and -1 upon failure with errno set as indicated.
SEE ALSO
close(2), fcntl(2), getmsg(2), introprm2(2), ioctl(2), open(2),
poll(2), putmsg(2), read(2), signal(2), write(2), signal(5).
Programmer's Guide: STREAMS
Page 16 Reliant UNIX 5.44 Printed 11/98