X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fnetwork.c;h=101e794d07c892827182455620e7d30dec5f2b88;hb=555214089c7045298f23fea9e060ea931804e75f;hp=4a287ada9bcd9e0beffad04535b15310964e951f;hpb=fd9eec78a3c275401d4b661a49cd90b972c9f58d;p=oweals%2Fgnunet.git diff --git a/src/util/network.c b/src/util/network.c index 4a287ada9..101e794d0 100644 --- a/src/util/network.c +++ b/src/util/network.c @@ -41,14 +41,6 @@ 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 @@ -142,11 +134,16 @@ static int socket_set_inheritable (const struct GNUNET_NETWORK_Handle *h) { int i; - i = fcntl (h->fd, F_GETFD); + + i = fcntl (h->fd, F_GETFD); + if (i < 0) + return GNUNET_SYSERR; if (i == (i | FD_CLOEXEC)) return GNUNET_OK; - return (fcntl (h->fd, F_SETFD, i | FD_CLOEXEC) == 0) - ? GNUNET_OK : GNUNET_SYSERR; + i |= FD_CLOEXEC; + if (fcntl (h->fd, F_SETFD, i) < 0) + return GNUNET_SYSERR; + return GNUNET_OK; } #endif @@ -268,7 +265,10 @@ GNUNET_NETWORK_socket_bind (struct GNUNET_NETWORK_Handle *desc, 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); + if (0 != unlink (un->sun_path)) + GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, + "unlink", + un->sun_path); } #endif #endif @@ -291,16 +291,6 @@ 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; @@ -794,6 +784,23 @@ void GNUNET_NETWORK_fdset_set_native (struct GNUNET_NETWORK_FDSet *to, } +/** + * Test native fd in a set + * + * @param to set to test, NULL for empty set + * @param nfd native FD to test, or -1 for none + * @return GNUNET_YES if FD is set in the set + */ +int +GNUNET_NETWORK_fdset_test_native (const struct GNUNET_NETWORK_FDSet *to, + int nfd) +{ + if ( (nfd == -1) || (to == NULL) ) + return GNUNET_NO; + return FD_ISSET (nfd, &to->sds) ? GNUNET_YES : GNUNET_NO; +} + + /** * Add a file handle to the fd set * @param fds fd set @@ -1169,19 +1176,15 @@ GNUNET_NETWORK_socket_select (struct GNUNET_NETWORK_FDSet *rfds, while (retcode == 0 && (ms_total == INFINITE || GetTickCount () < limit)); if (retcode != -1) - { if (rfds) - { GNUNET_NETWORK_fdset_zero (rfds); GNUNET_NETWORK_fdset_copy_native (rfds, &aread, retcode); GNUNET_CONTAINER_slist_clear (rfds->handles); GNUNET_CONTAINER_slist_append (rfds->handles, handles_read); - } if (wfds) - { GNUNET_NETWORK_fdset_zero (wfds); GNUNET_NETWORK_fdset_copy_native (wfds, &awrite, retcode); @@ -1189,7 +1192,6 @@ GNUNET_NETWORK_socket_select (struct GNUNET_NETWORK_FDSet *rfds, GNUNET_CONTAINER_slist_append (wfds->handles, handles_write); } if (efds) - { GNUNET_NETWORK_fdset_zero (efds); GNUNET_NETWORK_fdset_copy_native (efds, &aexcept, retcode);