Почему я получаю сообщение об ошибке при использовании библиотеки ev на windows? - PullRequest
0 голосов
/ 13 апреля 2020

Я использовал Libev в проекте.

Я скачал библиотеку ev и собрал ее, поэтому получил dll и libev, а затем связал ее с

моего проекта, но при запуске проекта получилось следующее ошибка.

на самом деле я имею в виду в ев. c строка 2084:

Expression: ("libev: only socket fds supported in this configuration", ioctlsocket (handle, FIONREAD, &arg) == 0)

Есть ли какие-либо изменения, необходимые для решения проблемы. Это часть кода:

int main() {
    const struct addrinfo hints = {
         .ai_family = PF_UNSPEC,
         .ai_socktype = SOCK_DGRAM,
         .ai_protocol = IPPROTO_UDP


    };

    quiche_enable_debug_logging(debug_log, NULL);

   struct addrinfo* local;
   int iResult;
   WSADATA wsaData;
   iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (getaddrinfo("localhost", "5555", &hints, &local) != 0) {
        perror("failed to resolve host");
        return -1;
    }

    int sock = socket(local->ai_family, SOCK_DGRAM, 0);
    if (sock < 0) {
        perror("failed to create socket");
        return -1;
    }

    u_long nonblocking_enabled = TRUE;


    if (ioctlsocket(sock, FIONBIO, &nonblocking_enabled) != 0) {
        perror("failed to make socket non-blocking");
        return -1;
    }

    if (bind(sock, local->ai_addr, local->ai_addrlen) < 0) {
        perror("failed to connect socket");
        return -1;
    }

    config = quiche_config_new(QUICHE_PROTOCOL_VERSION);
    if (config == NULL) {
        fprintf(stderr, "failed to create config\n");
        return -1;
    }


    struct connections c;
    c.sock = sock;
    c.h = NULL;

    conns = &c;

    ev_io watcher;

    struct ev_loop* loop = ev_default_loop(0);

    ev_io_init(&watcher, recv_cb, sock, EV_READ);
    ev_io_start(loop, &watcher);
    watcher.data = &c;

    ev_loop(loop, 0);

    freeaddrinfo(local);

    quiche_config_free(config);

    return 0;
}
...