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

Synchronous I/O Multiplexing with, Select

Page 72 highlights

Advanced Topics for Stream Sockets Synchronous I/O Multiplexing with Select Synchronous I/O Multiplexing with Select The select system call can be used with sockets to provide a synchronous multiplexing mechanism. The system call has several parameters which govern its behavior. If you specify a zero pointer for the timeout parameter, select will block until one or more of the specified socket descriptors is ready. If timeout is a non-zero pointer, it specifies a maximum interval to wait for the selection to complete. A select of a socket descriptor for reading is useful on: • A connected socket, because it determines when data have arrived and are ready to be read without blocking; use the FIONREAD parameter to the ioctl system call to determine exactly how much data are available. • A listening socket, because it determines when you can accept a connection without blocking. • Any socket to detect if an error has occurred on the socket. A select of a socket descriptor for writing is useful on: • A connecting socket, because it determines when a connection is complete. • A connected socket, because it determines when more data can be sent without blocking. This implies that at least one byte can be sent; there is no way, however, to determine exactly how many bytes can be sent. • Any socket to detect if an error has occurred on the socket. select for exceptional conditions will return true for BSD sockets if out-of-band data is available to be read. select will always return true for sockets which are no longer capable of being used (e.g. if a close or shutdown system call has been executed against them). select is used in the same way as in other applications. Refer to the select(2) man page for information on how to use select. 72 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

72
Chapter 3
Advanced Topics for Stream Sockets
Synchronous I/O Multiplexing with Select
Synchronous I/O Multiplexing with
Select
The
select
system call can be used with sockets to provide a
synchronous multiplexing mechanism. The system call has several
parameters which govern its behavior. If you specify a zero pointer for
the timeout parameter,
select
will block until one or more of the
specified socket descriptors is ready. If timeout is a non-zero pointer, it
specifies a maximum interval to wait for the selection to complete.
A
select
of a socket descriptor for
reading
is useful on:
A connected socket, because it determines when data have arrived
and are ready to be read without blocking; use the FIONREAD
parameter to the
ioctl
system call to determine exactly how much
data are available.
A listening socket, because it determines when you can accept a
connection without blocking.
Any socket to detect if an error has occurred on the socket.
A
select
of a socket descriptor for
writing
is useful on:
A connecting socket, because it determines when a connection is
complete.
A connected socket, because it determines when more data can be
sent without blocking. This implies that at least one byte can be sent;
there is no way, however, to determine exactly how many bytes can be
sent.
Any socket to detect if an error has occurred on the socket.
select
for exceptional conditions will return true for BSD sockets if
out-of-band data is available to be read.
select
will always return true
for sockets which are no longer capable of being used (e.g. if a
close
or
shutdown
system call has been executed against them).
select
is used in the same way as in other applications. Refer to the
select(2)
man page for information on how to use
select
.