How to get errno when epoll_wait returns EPOLLERR?

前端 未结 4 1289
鱼传尺愫
鱼传尺愫 2021-02-07 12:51

Is there a way to find out the errno when epoll_wait returns EPOLLERR for a particular fd?

Is there any further information about

相关标签:
4条回答
  • 2021-02-07 13:14

    Just a minor point: Your test won't work correctly, for two reasons. If EPOLLERR is defined as, say, 0x8, then your test will be comparing 8 with one (since == has higher precedence than &), giving you a zero, then anding that with the event mask.

    What you want is: (epoll_event.events & EPOLLERR) != 0 to test for the EPOLLERR bit being set.

    0 讨论(0)
  • 2021-02-07 13:18

    epoll_wait returns -1 when an error occurs and sets errno appropriately. See "man 2 epoll_wait" for more info.

    0 讨论(0)
  • 2021-02-07 13:35

    Use getsockopt and SO_ERROR to get the pending error on the socket

    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));
    }
    
    0 讨论(0)
  • 2021-02-07 13:35

    Include errno.h and use perror to see the error message. Basically error is from the epfd or interupt, it will not arise from the file descriptor in your set.

    include "errno.h"

    if(epoll_wait() == -1)
        {
          perror("Epoll error : ");
        }
    
    0 讨论(0)
提交回复
热议问题