HP Rp7410 BSD Sockets Interface Programmer's Guide - Page 68

So_linger

Page 68 highlights

Table 3-1 Advanced Topics for Stream Sockets Socket Options Summary Information for Changing Socket Buffer Size SocketType (Protocol) When Buffer Size Increase Allowed When Buffer Size Decrease Allowed Maximum Buffer Size stream (TCP) at any time only prior to establishing a connection 262144 bytes SO_LINGER SO_LINGER controls the actions taken when a close is executed on a socket that has unsent data. This option can be cleared by toggling. The default is off. The linger timeout interval is set with a parameter in the setsockopt call. The only useful values are zero and nonzero: • If l_onoff is zero, close returns immediately, but any unsent data is transmitted (after close returns). • If l_onoff is nonzero and l_linger is zero, close returns immediately, and any unsent data is discarded. • If l_onoff is nonzero and l_linger is nonzero, close does not return until all unsent data is transmitted (or the connection is closed by the remote system). In the default case (SO_LINGER is off), close is not blocked. The socket itself, however, goes through graceful disconnect, and no data is lost. Here is an example: int result; struct linger linger; linger.l_onoff = 1; /*0 = off (l_linger ignored), nonzero = on */ linger.l_linger =1; /*0 = discard data, nonzero = wait for data sent */ result = setsockopt(s, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger)); 68 Chapter 3

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196

68
Chapter 3
Advanced Topics for Stream Sockets
Socket Options
Table 3-1
Summary Information for Changing Socket Buffer Size
SO_LINGER
SO_LINGER controls the actions taken when a
close
is executed on a
socket that has unsent data. This option can be cleared by toggling. The
default is off.
The linger timeout interval is set with a parameter in the
setsockopt
call. The only useful values are zero and nonzero:
If l_onoff is zero,
close
returns immediately, but any unsent data is
transmitted (after
close
returns).
If l_onoff is nonzero and l_linger is zero,
close
returns immediately,
and any unsent data is discarded.
If l_onoff is nonzero and l_linger is nonzero,
close
does not return
until all unsent data is transmitted (or the connection is closed by the
remote system).
In the default case (SO_LINGER is off),
close
is not blocked. The socket
itself, however, goes through graceful disconnect, and no data is lost.
Here is an example:
int result;
struct linger linger;
linger.l_onoff = 1;
/*0 = off (l_linger ignored), nonzero = on */
linger.l_linger =1;
/*0 = discard data, nonzero = wait for data sent */
result = setsockopt(s, SOL_SOCKET, SO_LINGER, &linger,
sizeof(linger));
SocketType (Protocol)
stream (TCP)
When Buffer Size
Increase Allowed
at any time
When Buffer Size
Decrease Allowed
only prior to establishing a
connection
Maximum Buffer Size
262144 bytes