X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fnet_socket.c;h=fcadd90c25e95531cc8f05833971f18f1267699f;hp=931f21d111ee9625047d6e35737656611d41df32;hb=097f88088e00923b74bc4c38e67feceb162ba4ef;hpb=0d79f476e0311fb36f41c9c6d86744f9d5386fba diff --git a/src/net_socket.c b/src/net_socket.c index 931f21d1..fcadd90c 100644 --- a/src/net_socket.c +++ b/src/net_socket.c @@ -72,95 +72,6 @@ static void configure_tcp(connection_t *c) { #endif } -bool setup_listen_socket(meshlink_handle_t *mesh, int nfd, int sa_family) { -#ifdef FD_CLOEXEC - fcntl(nfd, F_SETFD, FD_CLOEXEC); -#endif - - int option = 1; - setsockopt(nfd, SOL_SOCKET, SO_REUSEADDR, (void *)&option, sizeof(option)); - -#if defined(IPV6_V6ONLY) - - if(sa_family == AF_INET6) { - setsockopt(nfd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&option, sizeof(option)); - } - -#else -#warning IPV6_V6ONLY not defined -#endif - - if(listen(nfd, 3)) { - logger(mesh, MESHLINK_ERROR, "System call `%s' failed: %s", "listen", sockstrerror(sockerrno)); - return false; - } - - return true; -} - -bool setup_vpn_in_socket(meshlink_handle_t *mesh, int nfd, int sa_family) { -#ifdef FD_CLOEXEC - fcntl(nfd, F_SETFD, FD_CLOEXEC); -#endif - -#ifdef O_NONBLOCK - { - int flags = fcntl(nfd, F_GETFL); - - if(fcntl(nfd, F_SETFL, flags | O_NONBLOCK) < 0) { - closesocket(nfd); - logger(mesh, MESHLINK_ERROR, "System call `%s' failed: %s", "fcntl", - strerror(errno)); - return false; - } - } -#elif defined(WIN32) - { - unsigned long arg = 1; - - if(ioctlsocket(nfd, FIONBIO, &arg) != 0) { - closesocket(nfd); - logger(mesh, MESHLINK_ERROR, "Call to `%s' failed: %s", "ioctlsocket", sockstrerror(sockerrno)); - return false; - } - } -#endif - - int option = 1; - setsockopt(nfd, SOL_SOCKET, SO_REUSEADDR, (void *)&option, sizeof(option)); - setsockopt(nfd, SOL_SOCKET, SO_BROADCAST, (void *)&option, sizeof(option)); - -#if defined(IPV6_V6ONLY) - - if(sa_family == AF_INET6) { - setsockopt(nfd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&option, sizeof(option)); - } - -#endif - -#if defined(IP_DONTFRAG) && !defined(IP_DONTFRAGMENT) -#define IP_DONTFRAGMENT IP_DONTFRAG -#endif - -#if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DO) - option = IP_PMTUDISC_DO; - setsockopt(nfd, IPPROTO_IP, IP_MTU_DISCOVER, (void *)&option, sizeof(option)); -#elif defined(IP_DONTFRAGMENT) - option = 1; - setsockopt(nfd, IPPROTO_IP, IP_DONTFRAGMENT, (void *)&option, sizeof(option)); -#endif - -#if defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DO) - option = IPV6_PMTUDISC_DO; - setsockopt(nfd, IPPROTO_IPV6, IPV6_MTU_DISCOVER, (void *)&option, sizeof(option)); -#elif defined(IPV6_DONTFRAG) - option = 1; - setsockopt(nfd, IPPROTO_IPV6, IPV6_DONTFRAG, (void *)&option, sizeof(option)); -#endif - - return true; -} /* int setup_vpn_in_socket */ - static void retry_outgoing_handler(event_loop_t *loop, void *data) { assert(data);