有没有办法找出errno
时epoll_wait
返回EPOLLERR
特定FD?
是否有关于错误性质的任何进一步的信息?
编辑:
添加更多的信息,以防止歧义
epoll_wait
等待对一些文件描述符。当你调用epoll_wait
你通过它epoll_event
结构的数组:
struct epoll_event {
uint32_t events; /* Epoll events */
epoll_data_t data; /* User data variable */
};
该epoll_data_t
结构具有相同的细节,你epoll_ctl
用于文件描述符添加到epoll的一个:
typedef union epoll_data {
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
} epoll_data_t;
我正在寻找的是当有对EPOLL正在等待文件描述符的一个错误会发生什么。
即:(epoll_event.events & EPOLLERR) == 1
- 有没有办法找出该文件描述错误的更多细节?
使用setsockopt和SO_ERROR得到插座上的未决错误
int error = 0;
socklen_t errlen = sizeof(error);
if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (void *)&error, &errlen) == 0)
{
printf("error = %s\n", strerror(error));
}
只是一个小点:你的测试将无法正常工作,有两个原因。如果EPOLLERR被定义为,比如说,0x8中,那么你的测试将是一个比较8(因为==比和更高的优先级),给你一个零,然后安定,与事件掩码。
你想要的是:(epoll_event.events&EPOLLERR)= 0,以测试EPOLLERR位被设置!
epoll_wait返回-1时发生错误,并设置errno适当。见“人2 epoll_wait”获取更多信息。
包括errno.h中和使用PERROR看到错误消息。基本上错误是从epfd的或interupt,它不会从您设定的文件描述符出现。
if(epoll_wait() == -1)
{
perror("Epoll error : ");
}