X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet.c;h=2e67de60fe1a4428287fed3189b4c21137842590;hp=c893f1e41c07c5027eda0b9c2cfca33932007fd0;hb=c217d214f4f071c235bc7c463a1da6124e2570a6;hpb=f80bf14f28925df6eaa56f3ed77adaf418ab9890 diff --git a/src/net.c b/src/net.c index c893f1e4..2e67de60 100644 --- a/src/net.c +++ b/src/net.c @@ -16,8 +16,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - $Id$ */ #include "system.h" @@ -149,7 +147,8 @@ static int build_fdset(fd_set *readset, fd_set *writeset) max = listen_socket[i].udp; } - FD_SET(device_fd, readset); + if(device_fd >= 0) + FD_SET(device_fd, readset); if(device_fd > max) max = device_fd; @@ -294,7 +293,7 @@ static void check_network_activity(fd_set * readset, fd_set * writeset) cp(); /* check input from kernel */ - if(FD_ISSET(device_fd, readset)) { + if(device_fd >= 0 && FD_ISSET(device_fd, readset)) { if(read_packet(&packet)) { packet.priority = 0; route(myself, &packet); @@ -378,7 +377,13 @@ int main_loop(void) maxfd = build_fdset(&readset, &writeset); +#ifdef HAVE_MINGW + LeaveCriticalSection(&mutex); +#endif r = select(maxfd + 1, &readset, &writeset, NULL, &tv); +#ifdef HAVE_MINGW + EnterCriticalSection(&mutex); +#endif if(r < 0) { if(errno != EINTR && errno != EAGAIN) {