gpt4 book ai didi

c - epoll:添加到 epoll-fd 的 SD 与事件上的实际 SD 值不同

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:38 32 4
gpt4 key购买 nike

我有两个线程在 epoll 上运行。一个线程尝试与服务器建立 TCP 连接,使用 EPOLL_CTL_ADD 选项将套接字添加到 epoll-fd。

另一个线程负责等待添加到 epoll-fd 的 SD 上的事件。

线程 1:

establish_tcp_conn()
{
struct epoll_event event;

sd = socket(AF_INET,SOCK_STREAM,0);
fcntl(sd, F_SETFL, O_NONBLOCK);
connect(sd,(struct sockaddr *)&servaddr, sizeof(servaddr));

event.events = EPOLLOUT | EPOLLIN | EPOLLRDHUP | EPOLLERR | EPOLLET ;

event.data.fd = sd;
event.data.ptr = data; //user data

epoll_ctl((int)g_epfd, EPOLL_CTL_ADD, sd, &event) ; // successful
......

}

线程 2:

void * sock_thread()
{
n = epoll_wait(g_epfd, events, MAX_SOCKETS, -1);
...
}

当添加到 g_epfdsd 上发生事件时,我看到 sd != events[i].data.fdevents[i].data.fd 的值包含不合理的值。但是事件被正确检测到。此外,附加到 event.data 的用户数据可以从 events[i].data.ptr

获得

为什么 events[i].data.fd 和用 EPOLL_CTL 添加的 sd 不一样?

最佳答案

epoll.data 是一个 union (参见 http://linux.die.net/man/2/epoll_wait )。这意味着您可以添加 fd 或数据指针,但不能同时添加。

关于c - epoll:添加到 epoll-fd 的 SD 与事件上的实际 SD 值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22973184/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com