By default, a close socket call returns control to your
program immediately, even where there is unsent data on the socket.
This data will be transmitted by the TCP protocol layer, but your
program is not notified of any error. This is true of both blocking
and nonblocking sockets.
You can request that no control be returned to your program
before unsent data has been transmitted and acknowledged by the receiver.
To do so, issue the SO_LINGER option on call setsockopt. Before you
issue the actual close() call, pass the following option value fields:
- ONOFF
- This fullword is used to enable or disable the SO_LINGER option.
Any nonzero value enables the option; a 0 value disables it.
- LINGER
- This is the linger time, in seconds; this is the maximum delay
the close call observes. If data is successfully transmitted before
this time expires, control is returned to your program. If this time
interval expires before data has been successfully transmitted, control
is returned to your program also. You cannot distinguish between
the two return events.
Note: If you set a 0 linger time, the connection
cannot close in an orderly manner, but stops, resulting in a RESET
segment being sent to the connection partner. Also, if the aborting
socket is in nonblocking mode, the close call is treated as though
no linger option had been set.