A call to write(2) will simply write the normal "in-band" data that you are already accustomed to doing. Consequently, a new function must be used to write out-of-band data. The send(2) function's prototype is shown here for this purpose:
int send(int s, const void *msg, int len, unsigned int flags);
This function requires four arguments, which are
- The socket s to write to.
- The message buffer msg to write from.
- The length (len) of the message.
- Sending option flags.
The send(2) function is like the write(2) call except that it has the additional flags argument provided. This is the essential ingredient. The send(2) function returns the number of characters written or -1 if an error occurred (check errno for the cause of the error).
To send out-of-band data, you use the first three arguments as you would in a call to write(2). If you supply the C language macro MSG_OOB for the flags argument, the data is sent as out-of band data instead of the normal "in-band" data, as follows:
char buf; /* Data */
int len; /* Bytes */
int s; /* Socket */
. . .
send(s, buf, len, MSG_OOB);
If the flags argument is supplied without the MSG_OOB flag bit, then the data is written as normal in-band data. This allows you to write both inband and out-of-band data with the same function call.You simply change the flags argument value under program control to accomplish this.