【发布时间】:2016-03-08 15:11:22
【问题描述】:
我是 C 的新手。现在我让我的服务器创建两个线程来监听两个不同的端口,它们都会调用bind a port->listen()->accept()。然后有两个客户端分别连接到这两个端口。然后这两个线程将accept() 并生成两个文件描述符。我很好奇的是,生成的文件描述符有可能是相同的整数吗?
【问题讨论】:
-
描述符是每个进程,而不是每个线程。
我是 C 的新手。现在我让我的服务器创建两个线程来监听两个不同的端口,它们都会调用bind a port->listen()->accept()。然后有两个客户端分别连接到这两个端口。然后这两个线程将accept() 并生成两个文件描述符。我很好奇的是,生成的文件描述符有可能是相同的整数吗?
【问题讨论】:
文件描述符是你不应该解释的东西 - 所以知道这一点实际上“不是你的事”;)
在一个进程内,系统调用返回的文件描述符保证是唯一的。所以两个线程会收到两个不同的整数(其实多线程根本不影响这个问题,结果就好像两个socket都在主线程中打开了一样)。
【讨论】:
它们可能是相同的整数,如果第一个线程在第二个套接字上的接受将创建一个新套接字之前关闭新套接字 - 文件描述符被回收。
【讨论】: