Версия:

Модуль coio

Модуль coio

enum COIO_EVENT
enumerator COIO_READ

событие чтения READ

enumerator COIO_WRITE

событие записи WRITE

int coio_wait(int fd, int event, double timeout)

Ожидание события чтения или записи (READ / WRITE) на сокете (fd) с передачей управления.

Параметры:
  • fd (int) – дескриптор файла сокета без блокировки
  • event (int) – запрашиваемые события. Комбинация битовых флагов COIO_READ | COIO_WRITE.
  • timeout (double) – время ожидания в секундах.
Результат:

0 - время ожидания

Результат:

>0 - возвращаемые события. Комбинация битовых флагов TNT_IO_READ | TNT_IO_WRITE.

ssize_t coio_call(ssize_t (*func)(va_list), ...)

Создание новой задачи ошибочного ввода-вывода (eio) с указанной функцией и аргументами. Передает управление и ожидает окончания задачи или истечения времени ожидания. Функция может использовать конфигурационный параметр worker_pool_threads.

Во избежание двойной проверки ошибок функция не выбрасывает исключения. В большинстве случаев также необходимо проверять возвращаемое значение вызванной функции и выполнить необходимые действия. Если функция определяет номер ошибки errno, этот номер ошибки сохраняется в течение вызова.

Результат:-1 и errno = ENOMEM, если задача не была создана
Результат:возврат функции (errno сохраняется).

Пример:

static ssize_t openfile_cb(va_list ap)
 {
         const char* filename = va_arg(ap);
         int flags = va_arg(ap);
         return open(filename, flags);
 }

 if (coio_call(openfile_cb, 0.10, "/tmp/file", 0) == -1)
     // обработка ошибок.
 ...
int coio_getaddrinfo(const char *host, const char *port, const struct addrinfo *hints, struct addrinfo **res, double timeout)

Версия getaddrinfo(3) для файбера.

int coio_close(int fd)

Закрытие fd и пробуждение любого файбера, заблокированного в вызове coio_wait() на данном сокете fd.

Параметры:
  • fd (int) – дескриптор файла сокета без блокировки
Результат:

результат close(fd), см. close(2)