network.h revision d54ef607275c4899e082fbeeb210346484d2e85f
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen unsigned short family;
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* maxmimum string length of IP address */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen#define IPADDR_IS_V4(ip) ((ip)->family == AF_INET)
2dc6cf8bad599bfe9129bb496539a08ee3631cc0Timo Sirainen#define IPADDR_IS_V6(ip) ((ip)->family == AF_INET6)
2dc6cf8bad599bfe9129bb496539a08ee3631cc0Timo Sirainen/* returns 1 if IPADDRs are the same */
2dc6cf8bad599bfe9129bb496539a08ee3631cc0Timo Sirainenint net_ip_compare(const IPADDR *ip1, const IPADDR *ip2);
2dc6cf8bad599bfe9129bb496539a08ee3631cc0Timo Sirainen/* Connect to socket with ip address */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainenint net_connect_ip(const IPADDR *ip, unsigned int port, const IPADDR *my_ip);
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* Connect to named UNIX socket */
e6bdf53eb0143af99e3eb977ff0f8a496ecd1a8dTimo Sirainen/* Disconnect socket */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* Try to let the other side close the connection, if it still isn't
f3e1593a7d9b02090575fb20db90a235e10145a5Timo Sirainen disconnected after certain amount of time, close it ourself */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* Set socket blocking/nonblocking */
f3e1593a7d9b02090575fb20db90a235e10145a5Timo Sirainen/* Set TCP_CORK if supported, ie. don't send out partial frames.
9446c7a5d400cba60d097c528bd08312552438e3Timo Sirainen Returns 0 if ok, -1 if failed. */
f3e1593a7d9b02090575fb20db90a235e10145a5Timo Sirainen/* Set IP to contain INADDR_ANY for IPv4 or IPv6. The IPv6 any address may
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen include IPv4 depending on the system (Linux yes, BSD no). */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* Listen for connections on a socket */
aff1e150e13980354cfd794c74dac76a791a641eTimo Sirainenint net_listen(const IPADDR *my_ip, unsigned int *port);
aff1e150e13980354cfd794c74dac76a791a641eTimo Sirainen/* Listen for connections on an UNIX socket */
ad3a1b8f8e2a5596afb1b099a69ae6f688887eecTimo Sirainen/* Accept a connection on a socket. Returns -1 for temporary failure,
aff1e150e13980354cfd794c74dac76a791a641eTimo Sirainen -2 for fatal failure */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainenint net_accept(int fd, IPADDR *addr, unsigned int *port);
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* Read data from socket, return number of bytes read,
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen -1 = error, -2 = disconnected */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainenssize_t net_receive(int fd, void *buf, size_t len);
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* Transmit data, return number of bytes sent, -1 = error, -2 = disconnected */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainenssize_t net_transmit(int fd, const void *data, size_t len);
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* Get IP addresses for host. ips contains ips_count of IPs, they don't need
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen to be free'd. Returns 0 = ok, others = error code for net_gethosterror() */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainenint net_gethostbyname(const char *addr, IPADDR **ips, int *ips_count);
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* get error of net_gethostname() */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* return TRUE if host lookup failed because it didn't exist (ie. not
e6bdf53eb0143af99e3eb977ff0f8a496ecd1a8dTimo Sirainen some error with name server) */
9446c7a5d400cba60d097c528bd08312552438e3Timo Sirainen/* Get socket address/port */
9446c7a5d400cba60d097c528bd08312552438e3Timo Sirainenint net_getsockname(int fd, IPADDR *addr, unsigned int *port);
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* IPADDR -> char* translation. `host' must be at least MAX_IP_LEN bytes */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* char* -> IPADDR translation. */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* Get socket error */
b494ffed8ded8d170d9ace3dc607b1d278048241Timo Sirainen/* Get name of TCP service */