0

我了解socketpairAPI 可以生成一对连接的套接字。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
4

0 回答 0