我了解socketpair
API 可以生成一对连接的套接字。socketpair()
但是在同一个过程中可以生成两个相同的对是真的吗?
// In the same process
int fd[2];
int r = socketpair(AF_UNIX, SOCK_STREAM, 0, fd);
printf("fd[0] = %d fd[1] = %d\n", fd[0], fd[1]);
// something else
r = socketpair(AF_UNIX, SOCK_STREAM, 0, fd);
printf("fd[0] = %d fd[1] = %d\n", fd[0], fd[1]);
如果打印出fd
对,是否可以看到以下结果?
fd[0] = 27 fd[1] = 28
fd[0] = 27 fd[1] = 28 // duplicated pairs?
如果这是正常行为,我们如何防止在关闭错误后读取?
// In the same process
int fd[2];
int r = socketpair(AF_UNIX, SOCK_STREAM, 0, fd);
printf("fd[0] = %d fd[1] = %d\n", fd[0], fd[1]);
// something else
close(fd[0]); // close the fd[0] (27)
r = socketpair(AF_UNIX, SOCK_STREAM, 0, fd);
printf("fd[0] = %d fd[1] = %d\n", fd[0], fd[1]);
read(fd[0]); // Bad FD error? As it already closed in the code above