X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fuml_device.c;h=2db5896c4ec7a4f65ce3fa1a28c5c39aa68f853f;hp=26bcb01ca46cda59af67645048cf5c803b869c30;hb=d178b583df9fe2bf3ebb3a7377203efc5c46df32;hpb=178e52f76ef4ba40748c13ea7e518837394d6dbc diff --git a/src/uml_device.c b/src/uml_device.c index 26bcb01c..2db5896c 100644 --- a/src/uml_device.c +++ b/src/uml_device.c @@ -1,7 +1,7 @@ /* device.c -- UML network socket Copyright (C) 2002-2005 Ivo Timmermans, - 2002-2011 Guus Sliepen + 2002-2012 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -77,6 +77,10 @@ static bool setup_device(void) { return false; } +#ifdef FD_CLOEXEC + fcntl(write_fd, F_SETFD, FD_CLOEXEC); +#endif + setsockopt(write_fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof one); if(fcntl(write_fd, F_SETFL, O_NONBLOCK) < 0) { @@ -91,6 +95,10 @@ static bool setup_device(void) { return false; } +#ifdef FD_CLOEXEC + fcntl(data_fd, F_SETFD, FD_CLOEXEC); +#endif + setsockopt(data_fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof one); if(fcntl(data_fd, F_SETFL, O_NONBLOCK) < 0) { @@ -118,6 +126,10 @@ static bool setup_device(void) { return false; } +#ifdef FD_CLOEXEC + fcntl(device_fd, F_SETFD, FD_CLOEXEC); +#endif + setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof one); if(fcntl(listen_fd, F_SETFL, O_NONBLOCK) < 0) { @@ -181,6 +193,10 @@ static bool read_packet(vpn_packet_t *packet) { return false; } +#ifdef FD_CLOEXEC + fcntl(request_fd, F_SETFD, FD_CLOEXEC); +#endif + if(fcntl(listen_fd, F_SETFL, O_NONBLOCK) < 0) { logger(LOG_ERR, "System call `%s' failed: %s", "fcntl", strerror(errno)); running = false; @@ -244,7 +260,7 @@ static bool read_packet(vpn_packet_t *packet) { } default: - logger(LOG_ERR, "Invalid value for state variable in " __FILE__); + logger(LOG_ERR, "Invalid value for state variable in " FILE); abort(); } }