PORT_SEND(3C) Standard C Library Functions PORT_SEND(3C)
NAME
port_send, port_sendn - send a user-defined event to a port or list
of ports
SYNOPSIS
#include <port.h>
int port_send(
int port,
int events,
void *user);
int port_sendn(
int ports[],
int errors[],
uint_t nent,
int events,
void *user);
DESCRIPTION
The
port_send() function submits a user-defined event to a specified
port. The
port argument is a file descriptor that represents a port.
The sent event has its
portev_events member set to the value
specified in the
events parameter and its
portev_user member set to
the value specified in the
user parameter. The
portev_object member
of an event sent with
port_send() is unspecified.
The
port_sendn() function submits a user-defined event to multiple
ports. The
ports argument is an array of file descriptors that
represents ports (see
port_create(3C)). The
nent argument specifies
the number of file descriptors in the
ports[] array. An event is
submitted to each specified port. Each event has its
portev_events member set to the value specified in the
events parameter and its
portev_user member set to the value specified in the
user parameter.
The
portev_object member of
events sent with
port_sendn() is
unspecified.
A port that is in alert mode can be sent an event, but that event
will not be retrievable until the port has resumed normal operation.
See
port_alert(3C).
RETURN VALUES
Upon successful completion, the
port_send() function returns 0.
Otherwise, it returns -1 and sets
errno to indicate the error.
The
port_sendn() function returns the number of successfully
submitted events. A non-negative return value less than the
nent argument indicates that at least one error occurred. In this case,
each element of the
errors[] array is filled in. An element of the
errors[] array is set to 0 if the event was successfully sent to the
corresponding port in the
ports[] array, or is set to indicate the
error if the event was not successfully sent. If an error occurs,
the
port_sendn() function returns -1 and sets
errno to indicate the
error.
ERRORS
The
port_send() and
port_sendn() functions will fail if:
EAGAIN The maximum number of events per port is exceeded. The
maximum allowable number of events per port is the minimum
value of the
process.max-port-events resource control at
the time
port_create(3C) was used to create the port.
EBADF The port file descriptor is not valid.
EBADFD The
port argument is not an event port file descriptor.
ENOMEM There is not enough memory available to satisfy the
request.
The
port_sendn() function will fail if:
EFAULT The
ports[] pointer or
errors[] pointer is not reasonable.
EINVAL The value of the
nent argument is 0.
EXAMPLES
Example 1: Use port_send() to send a user event (PORT_SOURCE_USER) to
a port.
The following example uses
port_send() to send a user event
(
PORT_SOURCE_USER) to a port and
port_get() to retrieve it. The
portev_user and
portev_events members of the
port_event_t structure
are the same as the corresponding user and events arguments of the
port_send() function.
#include <port.h>
int myport;
port_event_t pe;
struct timespec timeout;
int ret;
void *user;
myport = port_create();
if (myport) {
/* port creation failed ... */
...
return(...);
}
...
events = 0x01; /* own event definition(s) */
user = <my_own_value>;
ret = port_send(myport, events, user);
if (ret == -1) {
/* error detected ... */
...
close(myport);
return (...);
}
/*
* The following code could also be executed from another thread or
* process.
*/
timeout.tv_sec = 1; /* user defined */
timeout.tv_nsec = 0;
ret = port_get(myport, &pe, &timeout);
if (ret == -1) {
/*
* error detected :
* - EINTR or ETIME : log error code and try again ...
* - Other kind of errors : may have to close the port ...
*/
return(...);
}
/*
* After port_get() returns successfully, the port_event_t
* structure will be filled with:
* pe.portev_source = PORT_SOURCE_USER
* pe.portev_events = 0x01
* pe.portev_object = unspecified
* pe.portev_user = <my_own_value>
*/
...
close(myport);
USAGE
See
setrctl(2) and
rctladm(8) for information on using resource
controls.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-------------------+
|Architecture | all |
+--------------------+-------------------+
|Interface Stability | Committed |
+--------------------+-------------------+
|MT-Level | Async-Signal-Safe |
+--------------------+-------------------+
SEE ALSO
setrctl(2),
port_alert(3C),
port_associate(3C),
port_create(3C),
port_get(3C),
attributes(7),
rctladm(8) October 24, 2007 PORT_SEND(3C)