【问题标题】:How to send data immediately in epoll ET mode when connect established建立连接后如何在epoll ET模式下立即发送数据
【发布时间】:2012-09-29 15:12:26
【问题描述】:

我的服务器需要在客户端连接到它时发送数据。我正在使用 Epoll ET 模式。 但是怎么做呢?谁能给我一个简单的例子吗?

【问题讨论】:

    标签: epoll


    【解决方案1】:

    假设您正在侦听您的套接字(socketbindlisten),并将其描述符添加到 epoll(epoll_createepoll_ctl),那么epoll_wait 会告诉您何时出现是要接受的新连接。

    首先您接受连接(sockfd 是您正在侦听的套接字的描述符,efd 是 epoll 实例)并将其添加到您的 epoll 实例中:

    int connfd = accept4(sockfd, NULL, 0, SOCK_NONBLOCK);
    
    struct epoll_event ev;
    ev.events = EPOLLOUT | EPOLLET;
    ev.data.fd = connfd;
    epoll_ctl(efd, EPOLL_CTL_ADD, connfd, &ev)
    

    然后你回到你的主循环并再次调用epoll_wait。它会告诉你套接字何时准备好写入,而你只是高兴地writesendfile 离开。

    添加大量错误检查,可能还有TCP_CORK,你就完成了。 github.com/grahamking/netshare/ 上有一个工作示例。

    我希望这可以为您提供足够的信息以开始使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 2020-05-15
      • 1970-01-01
      • 2016-11-28
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多