#ifndef NETUTIL_H #define NETUTIL_H #include <sys/types.h> #include <sys/time.h> #include <fcntl.h> #ifdef __WIN32__ # include <winsock2.h> # include <ws2tcpip.h> # define socklen_t int # define in_addr_t uint32_t # define in_port_t uint16_t #else # include <sys/socket.h> # include <netinet/in.h> # include <arpa/inet.h> # include <netdb.h> #endif /* Initialize networking */ void net_init (void); /* Set socket blocking/nonblocking */ int soblock (int socket, int blocking); /* Like send(2), recv(2), connect(2), but with timeouts. Socket must be O_NONBLOCK. */ int connect_timeout (int s, const struct sockaddr *serv_addr, socklen_t addrlen, struct timeval *timeout); ssize_t send_timeout (int s, const void *buf, size_t len, int flags, struct timeval *timeout); ssize_t recv_timeout (int s, void *buf, size_t len, int flags, struct timeval *timeout); ssize_t recvfrom_timeout (int s, void *buf, size_t len, int flags, struct sockaddr *address, socklen_t * address_len, struct timeval *timeout); /* Like send_timeout and recv_timeout, but they retry (with the same timeout) in case of partial transfers, in order to try to transfer all data. */ ssize_t send_all_timeout (int s, const void *buf, size_t len, int flags, struct timeval *timeout); ssize_t recv_all_timeout (int s, void *buf, size_t len, int flags, struct timeval *timeout); #endif