HP Rp7410 BSD Sockets Interface Programmer's Guide - Page 82
Sending and Receiving Out-of-band Data
View all HP Rp7410 manuals
Add to My Manuals
Save this manual to your list of manuals |
Page 82 highlights
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