aboutsummaryrefslogtreecommitdiff
path: root/src/util/network.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2010-06-22 19:45:25 +0000
committerChristian Grothoff <christian@grothoff.org>2010-06-22 19:45:25 +0000
commit21ee2edb948ef1d8ac2c013d629429058601ad08 (patch)
treef53b237e6e4b30d229c73d4e964aabe05758b92d /src/util/network.c
parent02b1260d7e3efd32328313c2a5f733e843678394 (diff)
downloadgnunet-21ee2edb948ef1d8ac2c013d629429058601ad08.tar.gz
gnunet-21ee2edb948ef1d8ac2c013d629429058601ad08.zip
unlink UNIX domain socket filenames
Diffstat (limited to 'src/util/network.c')
-rw-r--r--src/util/network.c28
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;