M_RSE
This message is reserved for internal use. Modules that do not recognize
this message must pass it on. Drivers that do not recognize it must free it.
M_SETOPTS
This message is used to alter some characteristics of the stream head.
It is generated by any downstream module, and is interpreted by the stream
head. The data buffer of the message has the following structure, as defined
in stream.h:
struct stroptions {
uint so_flags; /* options to set */
shor so_readopt; /* read option */
ushort so_wroff; /* write offset */
ssize_t so_minpsz; /* minimum read packet size */
ssize_t so_maxpsz; /* maximum read packet size */
size_t so_hiwat; /* read queue high-water mark */
size_t so_lowat; /* read queue low-water mark */
unsigned char so_band; /* band for water marks */
ushort so_erropt; /* error option */
ssize_t so_maxblk; /* maximum message block size */
ushort so_copyopt; /* copy options (see stropts.h) */
};
|
where so_flags specifies which options are to be
altered, and can be any combination of the following:
SO_ALL -- Update all options according
to the values specified in the remaining fields of the stroptions structure.
SO_READOPT -- Set the read mode (see read(2)) as specified
by the value of so_readopt to:
RNORM -- Byte stream
RMSGD -- Message discard
RMSGN -- Message non-discard
RPROTNORM -- Normal protocol
RPROTDAT -- Turn M_PROTO and M_PCPROTO msgs into M_DATA
msgs
RPROTDIS -- Discard M_PROTO and M_PCPROTO blocks in a msg
and retain any linked M_DATA blocks
SO_WROFF -- Direct the stream head
to insert an offset (unwritten area), specified by so_wroff
into the first message block of all M_DATA messages created
as a result of a write(2).
The same offset is inserted into the first M_DATA message
block, if any, of all messages created by a putmsg system
call. The default offset is zero.
The offset must be less than the maximum message buffer size (system
dependent). Under certain circumstances, a write offset may not be inserted.
A module or driver must test that b_rptr in the msgb(9S)structure
is greater than db_base in the datab(9S) structure to determine that
an offset has been inserted in the first message block.
SO_MINPSZ -- Change the minimum packet
size value associated with the stream head read queue to so_minpsz. This value is advisory for the module immediately below the stream
head. It should limit the size of M_DATA messages that
the module should put to the stream head. There is no intended minimum size
for other message types. The default value in the stream head is zero.
SO_MAXPSZ -- Change the maximum packet
size value associated with the stream head read queue to so_maxpsz. This value is advisory for the module immediately below the stream
head. It should limit the size of M_DATA messages that
the module should put to the stream head. There is no intended maximum size
for other message types. The default value in the stream head is INFPSZ, the maximum STREAMS allows.
SO_HIWAT -- Change the flow control
high-water mark (q_hiwat in the queue(9S) structure, qb_hiwat in the qband(9S)
structure) on the stream-head read queue to the value specified in so_hiwat.
SO_LOWAT -- Change the flow control
low-water mark (q_lowat in the queue(9S) structure, qb_lowat in the qband(9S)
structure) on the stream-head read queue to the value specified in so_lowat.
SO_MREADON -- Enable the stream head
to generate M_READ messages when processing a read(2) system call. If both SO_MREADON and SO_MREADOFF are set in so_flags, SO_MREADOFF takes precedence.
SO_MREADOFF -- Disable the stream
head generation of M_READ messages when processing a read(2) system
call. This is the default. If both SO_MREADON and SO_MREADOFF are set in so_flags, SO_MREADOFF takes precedence.
SO_NDELON -- Set non-STREAMS TTY semantics
for O_NDELAY(or O_NONBLOCK) processing
on read(2)
and write(2).
If O_NDELAY(or O_NONBLOCK) is set, a read(2) returns
0 if no data is waiting to be read at the stream head. If O_NDELAY(or O_NONBLOCK) is clear, a read(2) blocks until data become available
at the stream head. (See note below)
Regardless of the state of O_NDELAY (or O_NONBLOCK), a write(2) blocks on flow control and blocks if
buffers are not available.
If both SO_NDELON and SO_NDELOFF
are set in so_flags, SO_NDELOFF takes
precedence.
Note - For conformance with the POSIX standard, new applications should
use the O_NONBLOCK flag whose behavior is the same as that
of O_NDELAY unless otherwise noted.
SO_NDELOFF -- Set STREAMS semantics
for O_NDELAY (or O_NONBLOCK) processing
on read(2)
and write(2)
system calls. If O_NDELAY(or O_NONBLOCK)
is set, a read(2)
will return -1 and set EAGAIN if no data is waiting to
be read at the stream head. If O_NDELAY (or O_NONBLOCK) is clear, a read(2)
blocks until data become available at the stream head. (See note above.)
If O_NDELAY (or O_NONBLOCK) is
set, a write(2)
returns -1 and sets EAGAIN if flow control is in effect
when the call is received. It blocks if buffers are not available. If O_NDELAY (or O_NONBLOCK) is set, part of the
buffer has been written, and a flow control or "buffers not available"
condition is encountered, write(2) terminates and returns the number of
bytes written.
If O_NDELAY (or O_NONBLOCK) is
clear, a write(2)
will block on flow control and will block if buffers are not available.
This is the default. If both SO_NDELON and SO_NDELOFF are set in so_flags, SO_NDELOFF takes precedence.
In the STREAMS-based pipe mechanism, the behavior of read(2) and write(2) is different for the O_NDELAY and O_NONBLOCK flags.
SO_BAND -- Set watermarks in a band.
If the SO_BAND flag is set with the SO_HIWAT
or SO_LOWAT flag, the so_band field
contains the priority band number related to the so_hiwat
and so_lowat fields.
If the SO_BAND flag is not set and the SO_HIWAT and SO_LOWAT flags are on, the normal
high-water and low-water marks are affected. The SO_BAND
flag has no effect if SO_HIWAT and SO_LOWAT
flags are off.
Only one band's water marks can be updated with a single M_SETOPTS message.
SO_ISTTY -- Inform the stream head
that the stream is acting like a controlling terminal.
SO_ISNTTY -- Inform the stream head
that the stream is no longer acting like a controlling terminal.
For SO_ISTTY, the stream may be allocated as a controlling
terminal via an M_SETOPTS message arriving upstream during
open processing. If the stream head is opened before receiving this message,
the stream will not be allocated as a controlling terminal until it is queued
again by a session leader.
SO_TOSTOP -- Stop on background writes
to the stream.
SO_TONSTOP -- Do not stop on background
writes to the stream. SO_TOSTOP and SO_TONSTOP are used in conjunction with job control.
SO_DELIM -- Messages are delimited.
SO_NODELIM -- Messages are not delimited.
SO_STRHOLD -- Enable strwrite message coalescing.
|