X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet_socket.c;h=10f2ca0106c407d6dba832a99bf39c199ad3fa99;hp=98f5d1a2cf9e65419e9dbcd3a419cf4299c9abc8;hb=0e59fb022c6c015a5be7ed70e0378cb011be98b5;hpb=eefa28059ab989c915a7d95fb4ae728abd7ce713 diff --git a/src/net_socket.c b/src/net_socket.c index 98f5d1a2..10f2ca01 100644 --- a/src/net_socket.c +++ b/src/net_socket.c @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: net_socket.c,v 1.1.2.30 2003/07/22 20:55:20 guus Exp $ + $Id: net_socket.c,v 1.1.2.34 2003/10/06 14:41:45 guus Exp $ */ #include "system.h" @@ -34,6 +34,10 @@ #include "utils.h" #include "xalloc.h" +#ifdef WSAEINPROGRESS +#define EINPROGRESS WSAEINPROGRESS +#endif + int addressfamily = AF_UNSPEC; int maxtimeout = 900; int seconds_till_retry = 5; @@ -43,31 +47,35 @@ int listen_sockets; /* Setup sockets */ -int setup_listen_socket(sockaddr_t *sa) +int setup_listen_socket(const sockaddr_t *sa) { int nfd, flags; char *addrstr; int option; char *iface; +#ifdef SO_BINDTODEVICE struct ifreq ifr; +#endif cp(); nfd = socket(sa->sa.sa_family, SOCK_STREAM, IPPROTO_TCP); if(nfd < 0) { - logger(LOG_ERR, _("Creating metasocket failed: %s"), strerror(errno)); + ifdebug(STATUS) logger(LOG_ERR, _("Creating metasocket failed: %s"), strerror(errno)); return -1; } +#ifdef O_NONBLOCK flags = fcntl(nfd, F_GETFL); if(fcntl(nfd, F_SETFL, flags | O_NONBLOCK) < 0) { - close(nfd); + closesocket(nfd); logger(LOG_ERR, _("System call `%s' failed: %s"), "fcntl", strerror(errno)); return -1; } +#endif /* Optimize TCP settings */ @@ -90,7 +98,7 @@ int setup_listen_socket(sockaddr_t *sa) strncpy(ifr.ifr_ifrn.ifrn_name, iface, IFNAMSIZ); if(setsockopt(nfd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof(ifr))) { - close(nfd); + closesocket(nfd); logger(LOG_ERR, _("Can't bind to interface %s: %s"), iface, strerror(errno)); return -1; @@ -101,7 +109,7 @@ int setup_listen_socket(sockaddr_t *sa) } if(bind(nfd, &sa->sa, SALEN(sa->sa))) { - close(nfd); + closesocket(nfd); addrstr = sockaddr2hostname(sa); logger(LOG_ERR, _("Can't bind to %s/tcp: %s"), addrstr, strerror(errno)); @@ -110,7 +118,7 @@ int setup_listen_socket(sockaddr_t *sa) } if(listen(nfd, 3)) { - close(nfd); + closesocket(nfd); logger(LOG_ERR, _("System call `%s' failed: %s"), "listen", strerror(errno)); return -1; @@ -119,7 +127,7 @@ int setup_listen_socket(sockaddr_t *sa) return nfd; } -int setup_vpn_in_socket(sockaddr_t *sa) +int setup_vpn_in_socket(const sockaddr_t *sa) { int nfd, flags; char *addrstr; @@ -138,13 +146,15 @@ int setup_vpn_in_socket(sockaddr_t *sa) return -1; } +#ifdef O_NONBLOCK flags = fcntl(nfd, F_GETFL); if(fcntl(nfd, F_SETFL, flags | O_NONBLOCK) < 0) { - close(nfd); + closesocket(nfd); logger(LOG_ERR, _("System call `%s' failed: %s"), "fcntl", strerror(errno)); return -1; } +#endif option = 1; setsockopt(nfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); @@ -156,7 +166,7 @@ int setup_vpn_in_socket(sockaddr_t *sa) strncpy(ifr.ifr_ifrn.ifrn_name, iface, IFNAMSIZ); if(setsockopt(nfd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof(ifr))) { - close(nfd); + closesocket(nfd); logger(LOG_ERR, _("Can't bind to interface %s: %s"), iface, strerror(errno)); return -1; @@ -165,7 +175,7 @@ int setup_vpn_in_socket(sockaddr_t *sa) #endif if(bind(nfd, &sa->sa, SALEN(sa->sa))) { - close(nfd); + closesocket(nfd); addrstr = sockaddr2hostname(sa); logger(LOG_ERR, _("Can't bind to %s/udp: %s"), addrstr, strerror(errno)); @@ -280,11 +290,13 @@ begin: /* Non-blocking */ +#ifdef O_NONBLOCK flags = fcntl(c->socket, F_GETFL); if(fcntl(c->socket, F_SETFL, flags | O_NONBLOCK) < 0) { logger(LOG_ERR, _("fcntl for %s: %s"), c->hostname, strerror(errno)); } +#endif /* Connect */ @@ -296,7 +308,7 @@ begin: return; } - close(c->socket); + closesocket(c->socket); ifdebug(CONNECTIONS) logger(LOG_ERR, _("%s: %s"), c->hostname, strerror(errno));