diff options
author | Christian Grothoff <christian@grothoff.org> | 2019-03-02 11:17:27 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2019-03-02 11:17:27 +0100 |
commit | 54d83ad059519ca03971b79b8410540d9438b5a8 (patch) | |
tree | a2471f782b38e0e6cea2bf15c208e15d08f8252e | |
parent | 2d4b48f0de0375545afa4da470e86b4e87c87ae6 (diff) | |
download | gnunet-54d83ad059519ca03971b79b8410540d9438b5a8.tar.gz gnunet-54d83ad059519ca03971b79b8410540d9438b5a8.zip |
cache PF support results from OS probe (#5553)
-rw-r--r-- | src/util/network.c | 58 |
1 files changed, 49 insertions, 9 deletions
diff --git a/src/util/network.c b/src/util/network.c index c236292b7..90f8c8640 100644 --- a/src/util/network.c +++ b/src/util/network.c | |||
@@ -83,24 +83,64 @@ struct GNUNET_NETWORK_Handle | |||
83 | int | 83 | int |
84 | GNUNET_NETWORK_test_pf (int pf) | 84 | GNUNET_NETWORK_test_pf (int pf) |
85 | { | 85 | { |
86 | static int cache_v4 = -1; | ||
87 | static int cache_v6 = -1; | ||
88 | static int cache_un = -1; | ||
86 | int s; | 89 | int s; |
90 | int ret; | ||
87 | 91 | ||
92 | switch (pf) | ||
93 | { | ||
94 | case PF_INET: | ||
95 | if (-1 != cache_v4) | ||
96 | return cache_v4; | ||
97 | break; | ||
98 | case PF_INET6: | ||
99 | if (-1 != cache_v6) | ||
100 | return cache_v6; | ||
101 | break; | ||
102 | #ifdef PF_UNIX | ||
103 | case PF_UNIX: | ||
104 | if (-1 != cache_un) | ||
105 | return cache_un; | ||
106 | break; | ||
107 | #endif | ||
108 | } | ||
88 | s = socket (pf, SOCK_STREAM, 0); | 109 | s = socket (pf, SOCK_STREAM, 0); |
89 | if (-1 == s) | 110 | if (-1 == s) |
90 | { | 111 | { |
91 | if (EAFNOSUPPORT == errno) | 112 | if (EAFNOSUPPORT != errno) |
92 | return GNUNET_NO; | 113 | { |
93 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 114 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, |
94 | "Failed to create test socket: %s\n", | 115 | "socket"); |
95 | STRERROR (errno)); | 116 | return GNUNET_SYSERR; |
96 | return GNUNET_SYSERR; | 117 | } |
118 | ret = GNUNET_NO; | ||
97 | } | 119 | } |
120 | else | ||
121 | { | ||
98 | #if WINDOWS | 122 | #if WINDOWS |
99 | closesocket (s); | 123 | closesocket (s); |
100 | #else | 124 | #else |
101 | close (s); | 125 | close (s); |
102 | #endif | 126 | #endif |
103 | return GNUNET_OK; | 127 | ret = GNUNET_OK; |
128 | } | ||
129 | switch (pf) | ||
130 | { | ||
131 | case PF_INET: | ||
132 | cache_v4 = ret; | ||
133 | break; | ||
134 | case PF_INET6: | ||
135 | cache_v6 = ret; | ||
136 | break; | ||
137 | #ifdef PF_UNIX | ||
138 | case PF_UNIX: | ||
139 | cache_un = ret; | ||
140 | break; | ||
141 | #endif | ||
142 | } | ||
143 | return ret; | ||
104 | } | 144 | } |
105 | 145 | ||
106 | 146 | ||