socket描述符是唯一的吗?

时间:2015-01-19 18:33:15

标签: c sockets networking

socket()函数返回的C套接字描述符是否唯一? 我同时从两个程序调用了这个,我得到了相同的输出

(socDes = socket(PF_INET, SOCK_MRP, 0)
printf("%d",socDes);

根据其手册页,socket()返回New socket的文件描述符

如果两个程序具有相同的套接字,接收的数据包如何转移到不同的进程?任何详细说明都会有所帮助。

2 个答案:

答案 0 :(得分:3)

套接字描述符是文件系统句柄,在其会话期间对于您的进程应该是唯一的。但如果你结束并重新开始,你可能会得到相同的价值。

请记住,每个进程都有自己的文件系统句柄列表。因此,过程10中的文件描述符3可以与过程20中的文件描述符3非常不同。

答案 1 :(得分:1)

文件描述符是进程资源。系统中加载的每个程序都有自己独立的文件描述符集。这就是STDOUT / STDIN对应FD 1/2(或者是0/1?)的原因。在实践中,文件描述符是操作系统所拥有的资源的数字标识符,它们恰好可以作为整数打印(在所有系统上都没有保证,你所看到的是实现细节) 。在操作系统中,FD 1,2,3等对应的资源不同于另一个进程。

由于每个进程都有自己的资源池,因此文件描述符将位于不同的池中。它们碰巧具有相同的ID,因为操作系统分配了这些ID!