basic, low-level networking interface More...
Go to the source code of this file.
Data Structures | |
struct | GNUNET_NETWORK_Handle |
handle to a socket More... | |
Macros | |
#define | LOG(kind, ...) GNUNET_log_from (kind, "util-network", __VA_ARGS__) |
#define | LOG_STRERROR_FILE(kind, syscall, filename) |
#define | LOG_STRERROR(kind, syscall) |
#define | DEBUG_NETWORK GNUNET_EXTRA_LOGGING |
#define | INVALID_SOCKET -1 |
#define | FD_COPY(s, d) do { GNUNET_memcpy ((d), (s), sizeof(fd_set)); } while (0) |
Functions | |
enum GNUNET_GenericReturnValue | GNUNET_NETWORK_test_pf (int pf) |
Test if the given protocol family is supported by this system. More... | |
char * | GNUNET_NETWORK_shorten_unixpath (char *unixpath) |
Given a unixpath that is too long (larger than UNIX_PATH_MAX), shorten it to an acceptable length while keeping it unique and making sure it remains a valid filename (if possible). More... | |
void | GNUNET_NETWORK_unix_precheck (const struct sockaddr_un *un) |
If services crash, they can leave a unix domain socket file on the disk. More... | |
enum GNUNET_GenericReturnValue | GNUNET_NETWORK_socket_set_blocking (struct GNUNET_NETWORK_Handle *fd, int doBlock) |
Set if a socket should use blocking or non-blocking IO. More... | |
static int | socket_set_inheritable (const struct GNUNET_NETWORK_Handle *h) |
Make a socket non-inheritable to child processes. More... | |
static void | socket_set_nodelay (const struct GNUNET_NETWORK_Handle *h) |
Disable delays when sending data via the socket. More... | |
static int | initialize_network_handle (struct GNUNET_NETWORK_Handle *h, int af, int type) |
Perform proper canonical initialization for a network handle. More... | |
struct GNUNET_NETWORK_Handle * | GNUNET_NETWORK_socket_accept (const struct GNUNET_NETWORK_Handle *desc, struct sockaddr *address, socklen_t *address_len) |
Accept a new connection on a socket. More... | |
enum GNUNET_GenericReturnValue | GNUNET_NETWORK_socket_bind (struct GNUNET_NETWORK_Handle *desc, const struct sockaddr *address, socklen_t address_len) |
Bind a socket to a particular address. More... | |
enum GNUNET_GenericReturnValue | GNUNET_NETWORK_socket_close (struct GNUNET_NETWORK_Handle *desc) |
Close a socket. More... | |
void | GNUNET_NETWORK_socket_free_memory_only_ (struct GNUNET_NETWORK_Handle *desc) |
Only free memory of a socket, keep the file descriptor untouched. More... | |
struct GNUNET_NETWORK_Handle * | GNUNET_NETWORK_socket_box_native (int fd) |
Box a native socket (and check that it is a socket). More... | |
enum GNUNET_GenericReturnValue | GNUNET_NETWORK_socket_connect (const struct GNUNET_NETWORK_Handle *desc, const struct sockaddr *address, socklen_t address_len) |
Connect a socket to some remote address. More... | |
enum GNUNET_GenericReturnValue | GNUNET_NETWORK_socket_getsockopt (const struct GNUNET_NETWORK_Handle *desc, int level, int optname, void *optval, socklen_t *optlen) |
Get socket options. More... | |
enum GNUNET_GenericReturnValue | GNUNET_NETWORK_socket_listen (const struct GNUNET_NETWORK_Handle *desc, int backlog) |
Listen on a socket. More... | |
ssize_t | GNUNET_NETWORK_socket_recvfrom_amount (const struct GNUNET_NETWORK_Handle *desc) |
How much data is available to be read on this descriptor? More... | |
ssize_t | GNUNET_NETWORK_socket_recvfrom (const struct GNUNET_NETWORK_Handle *desc, void *buffer, size_t length, struct sockaddr *src_addr, socklen_t *addrlen) |
Read data from a socket (always non-blocking). More... | |
ssize_t | GNUNET_NETWORK_socket_recv (const struct GNUNET_NETWORK_Handle *desc, void *buffer, size_t length) |
Read data from a connected socket (always non-blocking). More... | |
ssize_t | GNUNET_NETWORK_socket_send (const struct GNUNET_NETWORK_Handle *desc, const void *buffer, size_t length) |
Send data (always non-blocking). More... | |
ssize_t | GNUNET_NETWORK_socket_sendto (const struct GNUNET_NETWORK_Handle *desc, const void *message, size_t length, const struct sockaddr *dest_addr, socklen_t dest_len) |
Send data to a particular destination (always non-blocking). More... | |
int | GNUNET_NETWORK_socket_setsockopt (struct GNUNET_NETWORK_Handle *fd, int level, int option_name, const void *option_value, socklen_t option_len) |
Set socket option. More... | |
struct GNUNET_NETWORK_Handle * | GNUNET_NETWORK_socket_create (int domain, int type, int protocol) |
Create a new socket. More... | |
enum GNUNET_GenericReturnValue | GNUNET_NETWORK_socket_shutdown (struct GNUNET_NETWORK_Handle *desc, int how) |
Shut down socket operations. More... | |
enum GNUNET_GenericReturnValue | GNUNET_NETWORK_socket_disable_corking (struct GNUNET_NETWORK_Handle *desc) |
Disable the "CORK" feature for communication with the given socket, forcing the OS to immediately flush the buffer on transmission instead of potentially buffering multiple messages. More... | |
void | GNUNET_NETWORK_fdset_zero (struct GNUNET_NETWORK_FDSet *fds) |
Reset FD set. More... | |
void | GNUNET_NETWORK_fdset_set (struct GNUNET_NETWORK_FDSet *fds, const struct GNUNET_NETWORK_Handle *desc) |
Add a socket to the FD set. More... | |
int | GNUNET_NETWORK_fdset_isset (const struct GNUNET_NETWORK_FDSet *fds, const struct GNUNET_NETWORK_Handle *desc) |
Check whether a socket is part of the fd set. More... | |
void | GNUNET_NETWORK_fdset_add (struct GNUNET_NETWORK_FDSet *dst, const struct GNUNET_NETWORK_FDSet *src) |
Add one fd set to another. More... | |
void | GNUNET_NETWORK_fdset_copy (struct GNUNET_NETWORK_FDSet *to, const struct GNUNET_NETWORK_FDSet *from) |
Copy one fd set to another. More... | |
int | GNUNET_NETWORK_get_fd (const struct GNUNET_NETWORK_Handle *desc) |
Return file descriptor for this network handle. More... | |
struct sockaddr * | GNUNET_NETWORK_get_addr (const struct GNUNET_NETWORK_Handle *desc) |
Return sockaddr for this network handle. More... | |
socklen_t | GNUNET_NETWORK_get_addrlen (const struct GNUNET_NETWORK_Handle *desc) |
Return sockaddr length for this network handle. More... | |
void | GNUNET_NETWORK_fdset_copy_native (struct GNUNET_NETWORK_FDSet *to, const fd_set *from, int nfds) |
Copy a native fd set. More... | |
void | GNUNET_NETWORK_fdset_set_native (struct GNUNET_NETWORK_FDSet *to, int nfd) |
Set a native fd in a set. More... | |
int | GNUNET_NETWORK_fdset_test_native (const struct GNUNET_NETWORK_FDSet *to, int nfd) |
Test native fd in a set. More... | |
void | GNUNET_NETWORK_fdset_handle_set (struct GNUNET_NETWORK_FDSet *fds, const struct GNUNET_DISK_FileHandle *h) |
Add a file handle to the fd set. More... | |
void | GNUNET_NETWORK_fdset_handle_set_first (struct GNUNET_NETWORK_FDSet *fds, const struct GNUNET_DISK_FileHandle *h) |
Add a file handle to the fd set. More... | |
int | GNUNET_NETWORK_fdset_handle_isset (const struct GNUNET_NETWORK_FDSet *fds, const struct GNUNET_DISK_FileHandle *h) |
Check if a file handle is part of an fd set. More... | |
int | GNUNET_NETWORK_fdset_overlap (const struct GNUNET_NETWORK_FDSet *fds1, const struct GNUNET_NETWORK_FDSet *fds2) |
Checks if two fd sets overlap. More... | |
struct GNUNET_NETWORK_FDSet * | GNUNET_NETWORK_fdset_create () |
Creates an fd set. More... | |
void | GNUNET_NETWORK_fdset_destroy (struct GNUNET_NETWORK_FDSet *fds) |
Releases the associated memory of an fd set. More... | |
int | GNUNET_NETWORK_test_port_free (int ipproto, uint16_t port) |
Test if the given port is available. More... | |
int | GNUNET_NETWORK_socket_select (struct GNUNET_NETWORK_FDSet *rfds, struct GNUNET_NETWORK_FDSet *wfds, struct GNUNET_NETWORK_FDSet *efds, const struct GNUNET_TIME_Relative timeout) |
Check if sockets or pipes meet certain conditions. More... | |
basic, low-level networking interface
Definition in file network.c.
#define LOG | ( | kind, | |
... | |||
) | GNUNET_log_from (kind, "util-network", __VA_ARGS__) |
#define LOG_STRERROR_FILE | ( | kind, | |
syscall, | |||
filename | |||
) |
#define LOG_STRERROR | ( | kind, | |
syscall | |||
) |
#define DEBUG_NETWORK GNUNET_EXTRA_LOGGING |
#define FD_COPY | ( | s, | |
d | |||
) | do { GNUNET_memcpy ((d), (s), sizeof(fd_set)); } while (0) |
|
static |
Make a socket non-inheritable to child processes.
h | the socket to make non-inheritable |
Definition at line 261 of file network.c.
References GNUNET_OK, GNUNET_SYSERR, and h.
Referenced by initialize_network_handle().
|
static |
Disable delays when sending data via the socket.
(GNUnet makes sure that messages are as big as possible already).
h | the socket to make non-delaying |
Definition at line 308 of file network.c.
References GNUNET_ERROR_TYPE_WARNING, h, LOG_STRERROR, and value.
Referenced by initialize_network_handle().
|
static |
Perform proper canonical initialization for a network handle.
Set it to non-blocking, make it non-inheritable to child processes, disable SIGPIPE, enable "nodelay" (if non-UNIX stream socket) and check that it is smaller than FD_SETSIZE.
h | socket to initialize |
af | address family of the socket |
type | socket type |
Definition at line 335 of file network.c.
References GNUNET_break, GNUNET_ERROR_TYPE_BULK, GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_NETWORK_socket_close(), GNUNET_NETWORK_socket_set_blocking(), GNUNET_NO, GNUNET_OK, GNUNET_SYSERR, h, INVALID_SOCKET, LOG_STRERROR, socket_set_inheritable(), socket_set_nodelay(), and type.
Referenced by GNUNET_NETWORK_socket_accept(), and GNUNET_NETWORK_socket_create().