From: Christian Grothoff Date: Tue, 22 Jun 2010 19:45:25 +0000 (+0000) Subject: unlink UNIX domain socket filenames X-Git-Tag: initial-import-from-subversion-38251~21277 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=21ee2edb948ef1d8ac2c013d629429058601ad08;p=oweals%2Fgnunet.git unlink UNIX domain socket filenames --- 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 { #ifndef MINGW int fd; + +#ifndef LINUX + /** + * For UNIX domain listen sockets, underlying filename to be removed + * on close. + */ + char *filename; +#endif + #else SOCKET fd; #endif + }; @@ -253,6 +263,14 @@ GNUNET_NETWORK_socket_bind (struct GNUNET_NETWORK_Handle *desc, #ifdef MINGW if (SOCKET_ERROR == ret) SetErrnoFromWinsockError (WSAGetLastError ()); +#else +#ifndef LINUX + if ( (ret == 0) && (address->sa_family == AF_UNIX)) + { + const struct sockaddr_un *un = (const struct sockaddr_un*) address; + desc->filename = GNUNET_strdup (un->sun_path); + } +#endif #endif return ret == 0 ? GNUNET_OK : GNUNET_SYSERR; } @@ -273,6 +291,16 @@ GNUNET_NETWORK_socket_close (struct GNUNET_NETWORK_Handle *desc) SetErrnoFromWinsockError (WSAGetLastError ()); #else ret = close (desc->fd); +#ifndef LINUX + if (NULL != desc->filename) + { + if (0 != unlink (desc->filename)) + GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, + "unlink", + desc->filename); + GNUNET_free (desc->filename); + } +#endif #endif GNUNET_free (desc); return (ret == 0) ? GNUNET_OK : GNUNET_SYSERR;