/* // Full copyright information is available in the file ../doc/CREDITS */ #ifndef cdc_io_h #define cdc_io_h typedef struct Conn Conn; typedef struct server_s server_t; typedef struct pending_s pending_t; #include "net.h" struct Conn { SOCKET fd; /* File descriptor for input and output. */ cBuf * write_buf; /* Buffer for network output. */ cObjnum objnum; /* Object connection is associated with. */ struct { char readable; /* Connection has new data pending. */ char writable; /* Connection can be written to. */ char dead; /* Connection is defunct. */ } flags; Conn * next; }; struct server_s { SOCKET server_socket; unsigned short port; cStr * addr; cObjnum objnum; Int dead; SOCKET client_socket; char client_addr[20]; unsigned short client_port; server_t * next; }; struct pending_s { SOCKET fd; Long task_id; cObjnum objnum; Long error; Int finished; pending_t *next; }; void flush_defunct(void); void handle_new_and_pending_connections(void); void handle_io_event_wait(Int seconds); void handle_connection_input(void); void handle_connection_output(void); Conn * find_connection(Obj * obj); Conn * tell(Obj * obj, cBuf *buf); Int boot(Obj * obj); Int tcp_server(Int port, char * addr, Long objnum); Int udp_server(Int port, char * addr, Long objnum); Int remove_server(Int port); Long make_connection(char *addr, Int port, cObjnum receiver); Long make_udp_connection(char *addr, Int port, cObjnum receiver); void flush_output(void); Long udp_connect(char *addr, Int port, Int *socket_return); #endif