Source code

Revision control

Copy as Markdown

Other Tools

# PRLinger
Structure used with the `PR_SockOpt_Linger` socket option to specify
the time interval (in {ref}`PRIntervalTime` units) to linger on closing a
socket if any data remain in the socket send buffer.
## Syntax
```{code}
#include <prio.h>
typedef struct PRLinger {
PRBool polarity;
PRIntervalTime linger;
} PRLinger;
```
## Fields
The structure has the following fields:
`polarity`
: Polarity of the option's setting: `PR_FALSE` means the option is
off, in which case the value of `linger` is ignored. `PR_TRUE`
means the option is on, and the value of `linger` will be used to
determine how long {ref}`PR_Close` waits before returning.
`linger`
: Time (in {ref}`PRIntervalTime` units) to linger before closing if any
data remain in the socket send buffer.
## Description
By default, {ref}`PR_Close` returns immediately, but if there are any data
remaining in the socket send buffer, the system attempts to deliver the
data to the peer. The `PR_SockOpt_Linger` socket option, with a value
represented by a structure of type {ref}`PRLinger`, makes it possible to
change this default as follows:
- If `polarity` is set to `PR_FALSE`, {ref}`PR_Close` returns
immediately, but if there are any data remaining in the socket send
buffer, the runtime attempts to deliver the data to the peer.
- If `polarity` is set to `PR_TRUE` and `linger` is set to 0
(`PR_INTERVAL_NO_WAIT`), the runtime aborts the connection when it
is closed and discards any data remaining in the socket send buffer.
- If `polarity` is set to `PR_TRUE` and `linger` is nonzero, the
runtime *lingers* when the socket is closed. That is, if any data
remains in the socket send buffer, {ref}`PR_Close` blocks until either
all the data is sent and acknowledged by the peer or the interval
specified by `linger` expires.