network.h revision e3376ba426f36e2845ed778879d8aecffef75969
8ec981fc8b0105da5f071e40811e0c2472a6c3c9Stéphane Graber unsigned short family;
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* maxmimum string length of IP address */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr#define IPADDR_IS_V4(ip) ((ip)->family == AF_INET)
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr#define IPADDR_IS_V6(ip) ((ip)->family == AF_INET6)
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* returns 1 if IPADDRs are the same */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frint net_ip_compare(const struct ip_addr *ip1, const struct ip_addr *ip2);
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Connect to socket with ip address */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frint net_connect_ip(const struct ip_addr *ip, unsigned int port,
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Connect to named UNIX socket */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Disconnect socket */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Set socket blocking/nonblocking */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Set TCP_CORK if supported, ie. don't send out partial frames.
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr Returns 0 if ok, -1 if failed. */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Set IP to contain INADDR_ANY for IPv4 or IPv6. The IPv6 any address may
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr include IPv4 depending on the system (Linux yes, BSD no). */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Listen for connections on a socket */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frint net_listen(const struct ip_addr *my_ip, unsigned int *port, int backlog);
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Listen for connections on an UNIX socket */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frint net_listen_unix(const char *path, int backlog);
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Accept a connection on a socket. Returns -1 for temporary failure,
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr -2 for fatal failure */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frint net_accept(int fd, struct ip_addr *addr, unsigned int *port);
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Read data from socket, return number of bytes read,
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr -1 = error, -2 = disconnected */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frssize_t net_receive(int fd, void *buf, size_t len);
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Transmit data, return number of bytes sent, -1 = error, -2 = disconnected */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frssize_t net_transmit(int fd, const void *data, size_t len);
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Get IP addresses for host. ips contains ips_count of IPs, they don't need
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr to be free'd. Returns 0 = ok, others = error code for net_gethosterror() */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frint net_gethostbyname(const char *addr, struct ip_addr **ips, int *ips_count);
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* get error of net_gethostname() */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* return TRUE if host lookup failed because it didn't exist (ie. not
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr some error with name server) */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Get socket local address/port */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frint net_getsockname(int fd, struct ip_addr *addr, unsigned int *port);
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Get socket remote address/port */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frint net_getpeername(int fd, struct ip_addr *addr, unsigned int *port);
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Returns ip_addr as string, or NULL if ip is invalid. */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frconst char *net_ip2addr(const struct ip_addr *ip);
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* char* -> struct ip_addr translation. */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frint net_addr2ip(const char *addr, struct ip_addr *ip);
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Get socket error */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.fr/* Get name of TCP service */
f8d0243a78c65ea3c46eb60fbeef799c3f6e9a5blxc@zitta.frconst char *net_getservbyport(unsigned short port);