diff options
author | Christian Grothoff <christian@grothoff.org> | 2010-06-22 19:45:25 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2010-06-22 19:45:25 +0000 |
commit | 21ee2edb948ef1d8ac2c013d629429058601ad08 (patch) | |
tree | f53b237e6e4b30d229c73d4e964aabe05758b92d /src/util/network.c | |
parent | 02b1260d7e3efd32328313c2a5f733e843678394 (diff) | |
download | gnunet-21ee2edb948ef1d8ac2c013d629429058601ad08.tar.gz gnunet-21ee2edb948ef1d8ac2c013d629429058601ad08.zip |
unlink UNIX domain socket filenames
Diffstat (limited to 'src/util/network.c')
-rw-r--r-- | src/util/network.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/util/network.c b/src/util/network.c index 99ba2c582..13ed345bf 100644 --- a/src/util/network.c +++ b/src/util/network.c | |||
@@ -40,9 +40,19 @@ struct GNUNET_NETWORK_Handle | |||
40 | { | 40 | { |
41 | #ifndef MINGW | 41 | #ifndef MINGW |
42 | int fd; | 42 | int fd; |
43 | |||
44 | #ifndef LINUX | ||
45 | /** | ||
46 | * For UNIX domain listen sockets, underlying filename to be removed | ||
47 | * on close. | ||
48 | */ | ||
49 | char *filename; | ||
50 | #endif | ||
51 | |||
43 | #else | 52 | #else |
44 | SOCKET fd; | 53 | SOCKET fd; |
45 | #endif | 54 | #endif |
55 | |||
46 | }; | 56 | }; |
47 | 57 | ||
48 | 58 | ||
@@ -253,6 +263,14 @@ GNUNET_NETWORK_socket_bind (struct GNUNET_NETWORK_Handle *desc, | |||
253 | #ifdef MINGW | 263 | #ifdef MINGW |
254 | if (SOCKET_ERROR == ret) | 264 | if (SOCKET_ERROR == ret) |
255 | SetErrnoFromWinsockError (WSAGetLastError ()); | 265 | SetErrnoFromWinsockError (WSAGetLastError ()); |
266 | #else | ||
267 | #ifndef LINUX | ||
268 | if ( (ret == 0) && (address->sa_family == AF_UNIX)) | ||
269 | { | ||
270 | const struct sockaddr_un *un = (const struct sockaddr_un*) address; | ||
271 | desc->filename = GNUNET_strdup (un->sun_path); | ||
272 | } | ||
273 | #endif | ||
256 | #endif | 274 | #endif |
257 | return ret == 0 ? GNUNET_OK : GNUNET_SYSERR; | 275 | return ret == 0 ? GNUNET_OK : GNUNET_SYSERR; |
258 | } | 276 | } |
@@ -273,6 +291,16 @@ GNUNET_NETWORK_socket_close (struct GNUNET_NETWORK_Handle *desc) | |||
273 | SetErrnoFromWinsockError (WSAGetLastError ()); | 291 | SetErrnoFromWinsockError (WSAGetLastError ()); |
274 | #else | 292 | #else |
275 | ret = close (desc->fd); | 293 | ret = close (desc->fd); |
294 | #ifndef LINUX | ||
295 | if (NULL != desc->filename) | ||
296 | { | ||
297 | if (0 != unlink (desc->filename)) | ||
298 | GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, | ||
299 | "unlink", | ||
300 | desc->filename); | ||
301 | GNUNET_free (desc->filename); | ||
302 | } | ||
303 | #endif | ||
276 | #endif | 304 | #endif |
277 | GNUNET_free (desc); | 305 | GNUNET_free (desc); |
278 | return (ret == 0) ? GNUNET_OK : GNUNET_SYSERR; | 306 | return (ret == 0) ? GNUNET_OK : GNUNET_SYSERR; |