| 261 |
261 |
| 262 static PurpleNetworkListenData * |
262 static PurpleNetworkListenData * |
| 263 purple_network_do_listen(unsigned short port, int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data) |
263 purple_network_do_listen(unsigned short port, int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data) |
| 264 { |
264 { |
| 265 int listenfd = -1; |
265 int listenfd = -1; |
| |
266 int flags; |
| 266 const int on = 1; |
267 const int on = 1; |
| 267 PurpleNetworkListenData *listen_data; |
268 PurpleNetworkListenData *listen_data; |
| 268 unsigned short actual_port; |
269 unsigned short actual_port; |
| 269 #ifdef HAVE_GETADDRINFO |
270 #ifdef HAVE_GETADDRINFO |
| 270 int errnum; |
271 int errnum; |
| 338 if (socket_type == SOCK_STREAM && listen(listenfd, 4) != 0) { |
339 if (socket_type == SOCK_STREAM && listen(listenfd, 4) != 0) { |
| 339 purple_debug_warning("network", "listen: %s\n", strerror(errno)); |
340 purple_debug_warning("network", "listen: %s\n", strerror(errno)); |
| 340 close(listenfd); |
341 close(listenfd); |
| 341 return NULL; |
342 return NULL; |
| 342 } |
343 } |
| 343 fcntl(listenfd, F_SETFL, O_NONBLOCK); |
344 flags = fcntl(listenfd, F_GETFL); |
| |
345 fcntl(listenfd, F_SETFL, flags | O_NONBLOCK); |
| 344 |
346 |
| 345 actual_port = purple_network_get_port_from_fd(listenfd); |
347 actual_port = purple_network_get_port_from_fd(listenfd); |
| 346 |
348 |
| 347 purple_debug_info("network", "Listening on port: %hu\n", actual_port); |
349 purple_debug_info("network", "Listening on port: %hu\n", actual_port); |
| 348 |
350 |