我有一些关于如何处理连接超时的代码使用 libev,如下所示(请参阅http://lists.schmorp.de/pipermail/libev/2011q2/001365.html):
sd = create_socket()
set_socket_nonblock(sd)
connect("127.0.0.1", port) // connect to an invalid port
ev_io_init(&w_io, connect_cb, sd, EV_WRITE)
ev_io_start(...)
ev_timer_init(&w_timer, timeout_cb, 5.0, 0)
ev_timer_start(...)
并在某个地方执行 ev_run。调用了 connect_cb,在这个回调函数中我用 EV_ERROR 检查了 revents,结果没有错误。这很奇怪,因为我提供了一个不在本地机器上监听的无效端口号。无论如何,我尝试在connect_cb函数中发送一条消息,得到一个错误111,这意味着连接被拒绝。我很困惑!使用非阻塞套接字时如何检查连接是否正确建立?