代码之家  ›  专栏  ›  技术社区  ›  doccarcass

使用epoll的非阻塞tcp连接

  •  4
  • doccarcass  · 技术社区  · 16 年前

    epoll_wait 检测三方握手完成。 有时 埃波尔等一下 POLLOUT &安培; POLLERR

    我想了解在TCP级别上发生了什么。我不能按需复制。我猜是两个电话 在我的事件循环中,我们有一个SYN+ACK/ACK/FIN序列,但我还是无法重现它。

    2 回复  |  直到 13 年前
        1
  •  6
  •   caf    16 年前

    如果连接失败,很可能会发生这种情况,例如“连接超时”(对于执行非阻塞连接的套接字, POLLOUT 为成功和不成功的结果完成连接操作时设置)。

    什么时候? 轮询 getsockopt(sock, SOL_SOCKET, SO_ERROR, ...) 检查连接是否成功 SO_ERROR 在本例中,socket选项为0,否则指示连接失败的原因)。

        2
  •  4
  •   Neopallium    15 年前

    non-blocking tcp connect() .

    当检测到套接字错误(即连接关闭/拒绝/超时),epoll将使用POLLERR返回注册的兴趣事件POLLIN/POLLOUT。因此,如果注册了POLLOUT,epoll|u wait()将返回POLLOUT | POLLERR;如果POLLIN | POLLOUT已注册,则返回POLLIN | POLLERR。