Annotation of embedaddon/mtr/packet/wait_cygwin.c, revision 1.1.1.2
1.1 misho 1: /*
2: mtr -- a network diagnostic tool
3: Copyright (C) 2016 Matt Kimball
4:
5: This program is free software; you can redistribute it and/or modify
6: it under the terms of the GNU General Public License version 2 as
7: published by the Free Software Foundation.
8:
9: This program is distributed in the hope that it will be useful,
10: but WITHOUT ANY WARRANTY; without even the implied warranty of
11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12: GNU General Public License for more details.
13:
1.1.1.2 ! misho 14: You should have received a copy of the GNU General Public License along
! 15: with this program; if not, write to the Free Software Foundation, Inc.,
! 16: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1.1 misho 17: */
18:
19: #include "wait.h"
20:
1.1.1.2 ! misho 21: #include <error.h>
! 22: #include <errno.h>
! 23: #include <sys/select.h>
1.1 misho 24:
25: #include "command.h"
26:
27: /*
1.1.1.2 ! misho 28: Wait for either a request from the command stream or
! 29: for the probe results to be passed from the ICMP service
! 30: thread.
1.1 misho 31: */
32: void wait_for_activity(
33: struct command_buffer_t *command_buffer,
34: struct net_state_t *net_state)
35: {
1.1.1.2 ! misho 36: int nfds;
! 37: fd_set read_set;
! 38: int ready_count;
! 39:
! 40: FD_ZERO(&read_set);
! 41:
! 42: FD_SET(command_buffer->command_stream, &read_set);
! 43: nfds = command_buffer->command_stream + 1;
! 44:
! 45: FD_SET(net_state->platform.thread_out_pipe_read, &read_set);
! 46: if (net_state->platform.thread_out_pipe_read >= nfds) {
! 47: nfds = net_state->platform.thread_out_pipe_read + 1;
! 48: }
1.1 misho 49:
1.1.1.2 ! misho 50: while (true) {
! 51: ready_count =
! 52: select(nfds, &read_set, NULL, NULL, NULL);
! 53:
! 54: if (ready_count != -1) {
! 55: return;
! 56: }
! 57:
! 58: /*
! 59: EINTR and EAGAIN simply mean that the select should
! 60: be retried.
! 61: */
! 62: if (errno != EINTR && errno != EAGAIN) {
! 63: error(EXIT_FAILURE, errno, "unexpected select error");
! 64: }
1.1 misho 65: }
66: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>