errno返回特定fd的epoll_wait时,有没有办法找出EPOLLERR

是否有关于错误性质的更多信息?

编辑:

添加更多信息以防止歧义
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-有没有办法找出文件描述符错误的更多详细信息?

最佳答案

使用getsockopt和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));
}

关于linux - 当epoll_wait返回EPOLLERR时如何获取errno?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13150377/

10-16 19:09