如何判断文件句柄是否是套接字?

net*_*tom 13 c unix sockets posix

我需要记录套接字使用情况,并编写了一个LD_PRELOAD库.

问题是当我覆盖read()和write()时,普通文件操作也被记录(当然).

那么如何区分普通文件描述符和套接字描述符呢?

Fre*_*Foo 29

调用fstat描述符并在结果上使用S_ISSOCK宏.

struct stat statbuf;
fstat(fd, &statbuf);
S_ISSOCK(statbuf.st_mode);
Run Code Online (Sandbox Code Playgroud)