aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2019-03-02 11:17:27 +0100
committerChristian Grothoff <christian@grothoff.org>2019-03-02 11:17:27 +0100
commit54d83ad059519ca03971b79b8410540d9438b5a8 (patch)
treea2471f782b38e0e6cea2bf15c208e15d08f8252e
parent2d4b48f0de0375545afa4da470e86b4e87c87ae6 (diff)
downloadgnunet-54d83ad059519ca03971b79b8410540d9438b5a8.tar.gz
gnunet-54d83ad059519ca03971b79b8410540d9438b5a8.zip
cache PF support results from OS probe (#5553)
-rw-r--r--src/util/network.c58
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
83int 83int
84GNUNET_NETWORK_test_pf (int pf) 84GNUNET_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