HP Rp3440-4 - 9000 - 0 MB RAM Programmer's Manual page 82

Bsd sockets interface programmer’s guide
Hide thumbs Also See for Rp3440-4 - 9000 - 0 MB RAM:
Table of Contents

Advertisement

Advanced Topics for Stream Sockets
Sending and Receiving Out-of-band Data
vec.sv_onstack = 0;
if (sigvector(SIGURG, &vec, (struct sigvec *) 0) < 0) {
perror("sigvector(SIGURG)");
}
onurg() is a routine that handles out-of-band data in the client
program.
In addition, the socket's process group must be set, as shown below. The
kernel will not send the signal to the process (or process group) unless
this is done, even though the signal handler has been enabled. Refer to
the socket(7) man page for more details.
/*
** arrange for the current process to receive SIGURG
** when the socket s has urgent data:
*/
pid = getpid();
if (ioctl(s, SIOCSPGRP, (char *) &pid) < 0) {
perror("ioctl(SIOCSPGRP)");
}
/*
** If a process needs to be notified, it should be
** pid = -getpgrp();
*/
If the server process is sending data to the client process, and a problem
occurs, the server can send an out-of-band data byte by executing a send
with the MSG_OOB flag set. This sends the out-of-band data and a
SIGURG signal to the receiving process.
send(sd, &msg, 1, MSG_OOB)
When a SIGURG signal is received, onurg is called. onurg receives the
out-of-band data byte with the MSG_OOB flag set on a recv call.
It is possible that the out-of-band byte has not arrived when the
SIGURG signal arrives. recv never blocks on a receive of out-of-band
data, so the client may need to repeat the recv call until the out-of-band
byte arrives. recv will return EINVAL if the out-of-band data is not
available.
Generally, the out-of-band data byte is stored independently from the
normal data stream. If, however, the OOB_INLINE socket option has
been turned on for this socket, the out-of-band data will remain inline
and must be used without the MSG_OOB flag set on a recv() call.
You cannot read past the out-of-band pointer location in one recv call. If
you request more data than the amount queued on the socket before the
out-of-band pointer, then recv will return only the data up to the
82
Chapter 3

Advertisement

Table of Contents
loading

Table of Contents