0
我有兩個線程可以在epoll上運行。一個線程嘗試TCP連接到服務器,並使用EPOLL_CTL_ADD選項將套接字添加到epoll-fd。Epoll:添加到epoll-fd的SD與事件的實際SD值不同
另一個線程負責等待添加到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);
...
}
當一個事件發生在sd
加入g_epfd
,我看到sd != events[i].data.fd
。 events[i].data.fd
的值包含不合理的值。但檢測correctly.Also的情況下,這是連接到event.data用戶數據被爲什麼events[i].data.fd
不一樣sd
,將其用加入EPOLL_CTL
得到的細從events[i].data.ptr
?
啊!謝謝@cmeerw! – Prabhu