// uasync.h // модуль асинхронных операций. добавляем сокеты и таймауты и mainloop их обслуживает. #ifndef UASYNC_H #define UASYNC_H #include #include typedef void (*timeout_callback_t)(void* user_arg);// передаёт user_arg из uasync_set_timeout typedef void (*socket_callback_t)(int fd, void* user_arg);// передаёт user_arg из uasync_add_socket // user_arg полезен если нужно передать управляющую структуру. Ее можно выделить в памяти и в ней хранить всё что надо. т.е. при set_timeout передаём и получаем ее в callback-е // Error type typedef int err_t; #define ERR_OK 0 #define ERR_FAIL -1 // Opaque uasync instance handle typedef struct uasync_s uasync_t; // Instance management uasync_t* uasync_create(void); void uasync_destroy(uasync_t* ua); void uasync_init(uasync_t* ua); // Alternative: initialize existing instance // Main loop void uasync_mainloop(uasync_t* ua);// бесконечный цикл, __noreturn // Timeouts, timebase = 0.1 mS void* uasync_set_timeout(uasync_t* ua, int timeout_tb, void* user_arg, timeout_callback_t callback); err_t uasync_cancel_timeout(uasync_t* ua, void* t_id); // Sockets void* uasync_add_socket(uasync_t* ua, int fd, socket_callback_t read_cbk, socket_callback_t write_cbk, socket_callback_t except_cbk, void* user_arg); err_t uasync_remove_socket(uasync_t* ua, void* s_id); // Single iteration of event loop with timeout (timebase units) void uasync_poll(uasync_t* ua, int timeout_tb); #endif // UASYNC_H