Is it possible that socketpair() return same pairs?

146 Views Asked by At

I understand that socketpair API can generate a pair of connected sockets. But is it true that socketpair() can generate two same pairs in the same process?

// 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]);

If print out the fd pairs, is it possible to see the below result?

fd[0] = 27 fd[1] = 28
fd[0] = 27 fd[1] = 28  // duplicated pairs?

If this is normal behavior, how can we protect from reading after close errors?

// 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
0

There are 0 best solutions below