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
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
|
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
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
|
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
|
* port pair.
*
* @param host The host to resolve
* @param port The port for the resulting address
* @param address A pointer to the address that should be filled with the
* host / port pair
*/
+ (void)resolveAddressForHost: (OFString*)host
+ (void)resolveAddressForHost: (OFString *)host
port: (uint16_t)port
address: (of_udp_socket_address_t*)address;
address: (of_udp_socket_address_t *)address;
#ifdef OF_HAVE_THREADS
/*!
* @brief Asynchronously resolves the specified host and creates an address for
* the host / port pair.
*
* @param host The host to resolve
* @param port The port for the resulting address
* @param target The target on which to call the selector once the host has been
* resolved
* @param selector The selector to call on the target. The signature must be
* `void (OFString *host, uint16_t port,
* of_udp_socket_address_t address, OFException *exception)`.
*/
+ (void)asyncResolveAddressForHost: (OFString*)host
+ (void)asyncResolveAddressForHost: (OFString *)host
port: (uint16_t)port
target: (id)target
selector: (SEL)selector;
# ifdef OF_HAVE_BLOCKS
/*!
* @brief Asynchronously resolves the specified host and creates an address for
* the host / port pair.
*
* @param host The host to resolve
* @param port The port for the resulting address
* @param block The block to execute once the host has been resolved
*/
+ (void)asyncResolveAddressForHost: (OFString*)host
+ (void)asyncResolveAddressForHost: (OFString *)host
port: (uint16_t)port
block: (of_udp_socket_async_resolve_block_t)block;
# endif
#endif
/*!
* @brief Gets the host and port for the specified address.
*
* @param host A pointer to an OFString*. If it is not NULL, it will be set to
* the host of the host / port pair.
* @param host A pointer to an @ref OFString *. If it is not NULL, it will be
* set to the host of the host / port pair.
* @param port A pointer to an uint16_t. If it is not NULL, the port of the
* host / port pair will be written to it.
* @param address The address for which the host and port should be retrieved
*/
+ (void)getHost: (OFString *__autoreleasing _Nonnull *_Nullable)host
andPort: (uint16_t *_Nullable)port
forAddress: (of_udp_socket_address_t*)address;
forAddress: (of_udp_socket_address_t *)address;
/*!
* @brief Binds the socket to the specified host and port.
*
* @param host The host to bind to. Use `@"0.0.0.0"` for IPv4 or `@"::"` for
* IPv6 to bind to all.
* @param port The port to bind to. If the port is 0, an unused port will be
* chosen, which can be obtained using the return value.
* @return The port the socket was bound to
*/
- (uint16_t)bindToHost: (OFString*)host
- (uint16_t)bindToHost: (OFString *)host
port: (uint16_t)port;
/*!
* @brief Receives a datagram and stores it into the specified buffer.
*
* If the buffer is too small, the datagram is truncated.
*
* @param buffer The buffer to write the datagram to
* @param length The length of the buffer
* @param sender A pointer to an @ref of_udp_socket_address_t, which will be
* set to the address of the sender
* @return The length of the received datagram
*/
- (size_t)receiveIntoBuffer: (void*)buffer
- (size_t)receiveIntoBuffer: (void *)buffer
length: (size_t)length
sender: (of_udp_socket_address_t*)sender;
sender: (of_udp_socket_address_t *)sender;
/*!
* @brief Asynchronously receives a datagram and stores it into the specified
* buffer.
*
* If the buffer is too small, the datagram is truncated.
*
* @param buffer The buffer to write the datagram to
* @param length The length of the buffer
* @param target The target on which the selector should be called when the
* datagram has been received. If the method returns true, it
* will be called again with the same buffer and maximum length
* when more datagrams have been received. If you want the next
* method in the queue to handle the datagram received next, you
* need to return false from the method.
* @param selector The selector to call on the target. The signature must be
* `bool (OFUDPSocket *socket, void *buffer, size_t length,
* of_udp_socket_address_t, OFException *exception)`.
*/
- (void)asyncReceiveIntoBuffer: (void*)buffer
- (void)asyncReceiveIntoBuffer: (void *)buffer
length: (size_t)length
target: (id)target
selector: (SEL)selector;
#ifdef OF_HAVE_BLOCKS
/*!
* @brief Asynchronously receives a datagram and stores it into the specified
* buffer.
*
* If the buffer is too small, the datagram is truncated.
*
* @param buffer The buffer to write the datagram to
* @param length The length of the buffer
* @param block The block to call when the datagram has been received. If the
* block returns true, it will be called again with the same
* buffer and maximum length when more datagrams have been
* received. If you want the next method in the queue to handle
* the datagram received next, you need to return false from the
* method.
*/
- (void)asyncReceiveIntoBuffer: (void*)buffer
- (void)asyncReceiveIntoBuffer: (void *)buffer
length: (size_t)length
block: (of_udp_socket_async_receive_block_t)block;
#endif
/*!
* @brief Sends the specified datagram to the specified address.
*
* @param buffer The buffer to send as a datagram
* @param length The length of the buffer
* @param receiver A pointer to an @ref of_udp_socket_address_t to which the
* datagram should be sent
*/
- (void)sendBuffer: (const void*)buffer
- (void)sendBuffer: (const void *)buffer
length: (size_t)length
receiver: (const of_udp_socket_address_t*)receiver;
receiver: (const of_udp_socket_address_t *)receiver;
/*!
* @brief Cancels all pending asynchronous requests on the socket.
*/
- (void)cancelAsyncRequests;
/*!
|