#ifndef NET_H #define NET_H #include #include #include #include #include #define NET_READ_READY POLLIN #define NET_WRITE_READY POLLOUT #define LISTEN_QUEUE SOMAXCONN struct socket_info; struct net_handler { void (*connect_handler)(void *p, int fd, const char *addr, const char *serv); void *connect_p; void (*io_handler)(int fd, short ev, struct socket_info *si); void *io_p; }; struct socket_info { int fd; unsigned pollent; struct net_handler nh; void (*output_overflow)(struct socket_info *si); void *userdata; void (*userdata_free)(void *); unsigned output_len; /* amount of data in the buffer */ unsigned output_max; /* max size */ char *output_buffer; /* pointer to the data buffer */ }; struct socket_info *socket_insert(int fd, short ev, void (*handler)(int fd, short ev, struct socket_info *si)); int net_lookup(const char *host, const char *sport, const char *pname, int (*foreach)(void *p, struct addrinfo *ai, const char *addr, const char *serv), void *p); void net_clear_event(struct socket_info *si, unsigned flag); int bind_entry(void *p, struct addrinfo *ai, const char *addr, const char *serv); int connect_entry(void *p, struct addrinfo *ai, const char *addr, const char *serv); int net_bind(const char *host, const char *sport, const char *pname, void (*handler)(void *p, int fd, const char *addr, const char *serv), void *p); int net_connect(const char *host, const char *sport, const char *pname, void (*connect_handler)(void *p, int fd, const char *addr, const char *serv), void *connect_p, void (*io_handler)(int fd, short ev, struct socket_info *si), void *io_p); int net_poll(void); void sockkill(struct socket_info *si); int sockwrite(struct socket_info *si, const void *buf, unsigned len); int sockvprintf(struct socket_info *si, const char *fmt, va_list ap); int sockprintf(struct socket_info *si, const char *fmt, ...); struct socket_info *socket_info_fd(int fd); void socket_info_setuserdata(struct socket_info *si, void *userdata, void (*userdata_free)(void *)); int net_get_nr_sockets(void); int socket_output_buffer_size(struct socket_info *si, unsigned newsize); #endif