检查套接字是否正在C中侦听

Mih*_*csu 13 c sockets file-descriptor

在遍历套接字文件描述符时,如何检查其中一个是否来自被动套接字(侦听连接)?

mar*_*k4o 21

可以使用getsockopt(SO_ACCEPTCONN)检查.例如:

#include <sys/socket.h>

int val;
socklen_t len = sizeof(val);
if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &val, &len) == -1)
    printf("fd %d is not a socket\n", fd);
else if (val)
    printf("fd %d is a listening socket\n", fd);
else
    printf("fd %d is a non-listening socket\n", fd);
Run Code Online (Sandbox Code Playgroud)