53 lines
1.8 KiB
Markdown
53 lines
1.8 KiB
Markdown
# 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.
|