X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fnetwork.c;h=08121928db6ee69312b571f4c48878ab68aeebeb;hb=8dfd7bda2f139e2dac27e804167eedc3d227453e;hp=58d67ed19fd36ba8933e4f666d30e91e47e5d419;hpb=bcb3c77b61fb9bff6d3c73414f8586c1e7163a3a;p=oweals%2Fgnunet.git diff --git a/src/util/network.c b/src/util/network.c index 58d67ed19..08121928d 100644 --- a/src/util/network.c +++ b/src/util/network.c @@ -270,10 +270,12 @@ GNUNET_NETWORK_socket_bind (struct GNUNET_NETWORK_Handle *desc, #ifdef IPPROTO_IPV6 const int on = 1; if (desc->af == AF_INET6) - setsockopt (desc->fd, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof (on)); + if (0 != setsockopt (desc->fd, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof (on))) + GNUNET_log_strerror (GNUNET_ERROR_TYPE_DEBUG, "setsockopt"); #if 0 /* is this needed or desired? or done elsewhere? */ - setsockopt (desc->fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on)); + if (0 != setsockopt (desc->fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on))) + GNUNET_log_strerror (GNUNET_ERROR_TYPE_DEBUG, "setsockopt"); #endif #endif #endif @@ -835,11 +837,9 @@ GNUNET_NETWORK_fdset_handle_set (struct GNUNET_NETWORK_FDSet *fds, const struct GNUNET_DISK_FileHandle *h) { #ifdef MINGW - HANDLE hw; - GNUNET_DISK_internal_file_handle_ (h, &hw, sizeof (HANDLE)); GNUNET_CONTAINER_slist_add (fds->handles, GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, - &hw, sizeof (HANDLE)); + h, sizeof (struct GNUNET_DISK_FileHandle)); #else int fd; @@ -852,23 +852,6 @@ GNUNET_NETWORK_fdset_handle_set (struct GNUNET_NETWORK_FDSet *fds, } -#if MINGW -/** - * Add a W32 file handle to the fd set - * @param fds fd set - * @param h the file handle to add - */ -void -GNUNET_NETWORK_fdset_handle_set_native_w32_handle (struct GNUNET_NETWORK_FDSet *fds, - HANDLE h) -{ - GNUNET_CONTAINER_slist_add (fds->handles, - GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, - &h, sizeof (HANDLE)); -} -#endif - - /** * Check if a file handle is part of an fd set * @param fds fd set @@ -881,8 +864,8 @@ GNUNET_NETWORK_fdset_handle_isset (const struct GNUNET_NETWORK_FDSet *fds, { #ifdef MINGW - return GNUNET_CONTAINER_slist_contains (fds->handles, &h->h, - sizeof (HANDLE)); + return GNUNET_CONTAINER_slist_contains (fds->handles, h, + sizeof (struct GNUNET_DISK_FileHandle)); #else return FD_ISSET (h->fd, &fds->sds); #endif @@ -913,7 +896,7 @@ GNUNET_NETWORK_fdset_overlap (const struct GNUNET_NETWORK_FDSet *fds1, } #else struct GNUNET_CONTAINER_SList_Iterator *it; - HANDLE *h; + struct GNUNET_DISK_FileHandle *h; int i; int j; @@ -931,9 +914,9 @@ GNUNET_NETWORK_fdset_overlap (const struct GNUNET_NETWORK_FDSet *fds1, it = GNUNET_CONTAINER_slist_begin (fds1->handles); while (GNUNET_CONTAINER_slist_end (it) != GNUNET_YES) { - h = (HANDLE *) GNUNET_CONTAINER_slist_get (it, NULL); + h = (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (it, NULL); if (GNUNET_CONTAINER_slist_contains - (fds2->handles, h, sizeof (HANDLE))) + (fds2->handles, h, sizeof (struct GNUNET_DISK_FileHandle))) { GNUNET_CONTAINER_slist_iter_destroy (it); return GNUNET_YES; @@ -1137,28 +1120,38 @@ GNUNET_NETWORK_socket_select (struct GNUNET_NETWORK_FDSet *rfds, GNUNET_CONTAINER_slist_next (i)) { - HANDLE h; + struct GNUNET_DISK_FileHandle *fh; DWORD dwBytes; - h = *(HANDLE *) GNUNET_CONTAINER_slist_get (i, NULL); - if (!PeekNamedPipe (h, NULL, 0, NULL, &dwBytes, NULL)) + fh = (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (i, NULL); + if (fh->type == GNUNET_PIPE) { - retcode = -1; - SetErrnoFromWinError (GetLastError ()); + if (!PeekNamedPipe (fh->h, NULL, 0, NULL, &dwBytes, NULL)) + { + retcode = -1; + SetErrnoFromWinError (GetLastError ()); -#if DEBUG_NETWORK - GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, - "PeekNamedPipe"); + #if DEBUG_NETWORK + GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, + "PeekNamedPipe"); -#endif - goto select_loop_end; - } - else if (dwBytes) + #endif + goto select_loop_end; + } + else if (dwBytes) + { + GNUNET_CONTAINER_slist_add (handles_read, + GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, + fh, sizeof (struct GNUNET_DISK_FileHandle)); + retcode++; + } + } + else { + /* Should we wait for more bytes to read here (in case of previous EOF)? */ GNUNET_CONTAINER_slist_add (handles_read, GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, - &h, sizeof (HANDLE)); - retcode++; + fh, sizeof (struct GNUNET_DISK_FileHandle)); } } GNUNET_CONTAINER_slist_iter_destroy (i); @@ -1174,16 +1167,20 @@ GNUNET_NETWORK_socket_select (struct GNUNET_NETWORK_FDSet *rfds, GNUNET_CONTAINER_slist_next (i)) { - HANDLE h; + struct GNUNET_DISK_FileHandle *fh; DWORD dwBytes; - h = *(HANDLE *) GNUNET_CONTAINER_slist_get (i, NULL); - if (!PeekNamedPipe (h, NULL, 0, NULL, &dwBytes, NULL)) + fh = (struct GNUNET_DISK_FileHandle *) GNUNET_CONTAINER_slist_get (i, NULL); + if (fh->type == GNUNET_PIPE) { - GNUNET_CONTAINER_slist_add (handles_except, - GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, - &h, sizeof (HANDLE)); - retcode++; + if (!PeekNamedPipe (fh->h, NULL, 0, NULL, &dwBytes, NULL)) + + { + GNUNET_CONTAINER_slist_add (handles_except, + GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, + fh, sizeof (struct GNUNET_DISK_FileHandle)); + retcode++; + } } } GNUNET_CONTAINER_slist_iter_destroy (i);