# 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 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.