今天读代码的时候,发现一个奇怪的操作:
一个线程在调用socket()函数后,并没有执行connect或listen操作 而是直接将这个socket加入了epoll中 来监听EPOLLIN时间
而在另外一个线程中 使用epoll_wait()却直接将这个socket作为一个就绪的描述符返回了
十分好奇这个socket是触发了什么事件,于是做了一个小实验,打印出了此socket触发时的events
#include <iostream>
#include "sys/epoll.h"
#include "sys/socket.h"
using namespace std;
int main() {
int sock = socket(AF_INET, SOCK_STREAM, 0);
int epollfd = epoll_create(1000);
struct epoll_event ev;
ev.events = EPOLLIN;
epoll_ctl(epollfd, EPOLL_CTL_ADD, sock, &ev);
struct epoll_event events[10];
int num = epoll_wait(epollfd, events, 1000, -1);
if (num == -1) {
cout << "ERROR : " << errno << endl;
return 0;
}
cout << "epoll events = " << events->events;
return 0;
}