/*
This file is part of GNUnet.
- Copyright (C) 2009-2013 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2009-2013 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
*/
/**
- * @file include/gnunet_network_lib.h
- * @brief basic low-level networking interface
* @author Nils Durner
+ *
+ * @file
+ * Basic low-level networking interface
+ *
+ * @defgroup network Network library
+ * Basic low-level networking interface
+ * @{
*/
#ifndef GNUNET_NETWORK_LIB_H
#define GNUNET_NETWORK_LIB_H
GNUNET_NETWORK_shorten_unixpath (char *unixpath);
+#ifndef WINDOWS
+/**
+ * If services crash, they can leave a unix domain socket file on the
+ * disk. This needs to be manually removed, because otherwise both
+ * bind() and connect() for the respective address will fail. In this
+ * function, we test if such a left-over file exists, and if so,
+ * remove it (unless there is a listening service at the address).
+ *
+ * @param un unix domain socket address to check
+ */
+void
+GNUNET_NETWORK_unix_precheck (const struct sockaddr_un *un);
+#endif
+
+
/**
* Accept a new connection on a socket. Configure it for non-blocking
* IO and mark it as non-inheritable to child processes (set the
* How much data is available to be read on this descriptor?
*
* @param desc socket
- * @returns #GNUNET_NO if no data is available, or on error!
+ * @returns #GNUNET_SYSERR if no data is available, or on error!
*/
ssize_t
GNUNET_NETWORK_socket_recvfrom_amount (const struct GNUNET_NETWORK_Handle *desc);
* @return POSIX file descriptor
*/
int
-GNUNET_NETWORK_get_fd (struct GNUNET_NETWORK_Handle *desc);
+GNUNET_NETWORK_get_fd (const struct GNUNET_NETWORK_Handle *desc);
/**
* @return POSIX file descriptor
*/
struct sockaddr*
-GNUNET_NETWORK_get_addr (struct GNUNET_NETWORK_Handle *desc);
+GNUNET_NETWORK_get_addr (const struct GNUNET_NETWORK_Handle *desc);
/**
* @return socklen_t for sockaddr
*/
socklen_t
-GNUNET_NETWORK_get_addrlen (struct GNUNET_NETWORK_Handle *desc);
+GNUNET_NETWORK_get_addrlen (const struct GNUNET_NETWORK_Handle *desc);
/**
GNUNET_NETWORK_fdset_destroy (struct GNUNET_NETWORK_FDSet *fds);
+/**
+ * Test if the given @a port is available.
+ *
+ * @param ipproto transport protocol to test (i.e. IPPROTO_TCP)
+ * @param port port number to test
+ * @return #GNUNET_OK if the port is available, #GNUNET_NO if not
+ */
+int
+GNUNET_NETWORK_test_port_free (int ipproto,
+ uint16_t port);
+
+
#if 0 /* keep Emacsens' auto-indent happy */
{
#endif
#endif
#endif /* GNUNET_NETWORK_LIB_H */
+
+/** @} */ /* end of group */