epoll_wait 在 "epoll_event" 中存储了一个不同的值
epoll_wait stores a different value in "epoll_event"
我会尽量保持简单。我有以下代码:
epoll_event event;
event.events = EPOLLIN | EPOLLET;
event.data.fd = clientSock; // this is equal to "7"
event.data.ptr = myPtr;
epoll_ctl(epoll, EPOLL_CTL_ADD, client, &event);
//Another thread
epoll_wait(epoll, &event2, MAX_EVENTS, EPOLL_TIMEOUT);
// This is the strange part...
cout << event2.data.fd; //output is different from "7"
但是,如果我不向 event.data.ptr
添加 ptr(我在调用 epoll_wait
之前所做的),event2.data.fd
的值是正确的 (7)。这是什么原因造成的?
The type of the data
member of struct epoll_event
is a union
。因此,在任何给定时间只有它的一个成员包含一个值,因此当您分配给 event.data.ptr
时,您替换了之前写入 event.data.fd
的值。因此,随后的 epoll_ctl
调用可能不会表达对您认为它感兴趣的事件的兴趣,但无论如何,您应该期望从结果事件数据中只读回 ptr
成员,而不是 fd
会员。
我会尽量保持简单。我有以下代码:
epoll_event event;
event.events = EPOLLIN | EPOLLET;
event.data.fd = clientSock; // this is equal to "7"
event.data.ptr = myPtr;
epoll_ctl(epoll, EPOLL_CTL_ADD, client, &event);
//Another thread
epoll_wait(epoll, &event2, MAX_EVENTS, EPOLL_TIMEOUT);
// This is the strange part...
cout << event2.data.fd; //output is different from "7"
但是,如果我不向 event.data.ptr
添加 ptr(我在调用 epoll_wait
之前所做的),event2.data.fd
的值是正确的 (7)。这是什么原因造成的?
The type of the data
member of struct epoll_event
is a union
。因此,在任何给定时间只有它的一个成员包含一个值,因此当您分配给 event.data.ptr
时,您替换了之前写入 event.data.fd
的值。因此,随后的 epoll_ctl
调用可能不会表达对您认为它感兴趣的事件的兴趣,但无论如何,您应该期望从结果事件数据中只读回 ptr
成员,而不是 fd
会员。