struct GNUNET_NETWORK_Handle
{
+#ifndef MINGW
int fd;
+#else
+ SOCKET fd;
+#endif
};
#ifdef WINDOWS
/**
- * Linked list of handles
+ * Linked list of handles
*/
struct GNUNET_CONTAINER_SList *handles;
#endif
#ifdef DARWIN
socket_set_nosigpipe (ret);
#endif
- socket_set_nodelay (ret);
+#ifdef AF_UNIX
+ if (address->sa_family != AF_UNIX)
+#endif
+ socket_set_nodelay (ret);
return ret;
}
* Returns GNUNET_NO if no data is available, or on error!
* @param desc socket
*/
-unsigned int
+ssize_t
GNUNET_NETWORK_socket_recvfrom_amount (const struct GNUNET_NETWORK_Handle
*desc)
{
int error;
- unsigned int pending;
+ int pending;
/* How much is there to be read? */
+#ifndef WINDOWS
error = ioctl (desc->fd, FIONREAD, &pending);
-
if (error == 0)
+#else
+ error = ioctlsocket (desc->fd, FIONREAD, &pending);
+ if (error != SOCKET_ERROR)
+#endif
return pending;
else
return GNUNET_NO;
#ifdef MSG_DONTWAIT
flags |= MSG_DONTWAIT;
-#endif /* */
+#endif
ret = recvfrom (desc->fd, buffer, length, flags, src_addr, addrlen);
-
#ifdef MINGW
if (SOCKET_ERROR == ret)
SetErrnoFromWinsockError (WSAGetLastError ());
-
-#endif /* */
+#endif
return ret;
}
#ifdef MSG_DONTWAIT
flags |= MSG_DONTWAIT;
-
-#endif /* */
+#endif
ret = recv (desc->fd, buffer, length, flags);
-
#ifdef MINGW
if (SOCKET_ERROR == ret)
SetErrnoFromWinsockError (WSAGetLastError ());
-
-#endif /* */
+#endif
return ret;
}
#ifdef DARWIN
socket_set_nosigpipe (ret);
#endif
- if (type == SOCK_STREAM)
+ if ( (type == SOCK_STREAM)
+#ifdef AF_UNIX
+ && (domain != AF_UNIX)
+#endif
+ )
socket_set_nodelay (ret);
return ret;
}
to->nsds = nfds;
}
+
+/**
+ * Set a native fd in a set
+ *
+ * @param to destination
+ * @param nfd native FD to set
+ */
+void GNUNET_NETWORK_fdset_set_native (struct GNUNET_NETWORK_FDSet *to,
+ int nfd)
+{
+ FD_SET (nfd, &to->sds);
+ to->nsds = GNUNET_MAX (nfd + 1, to->nsds);
+}
+
+
/**
* Add a file handle to the fd set
* @param fds fd set