【问题标题】:one server bind different ports一台服务器绑定不同的端口
【发布时间】:2016-03-08 15:11:22
【问题描述】:

我是 C 的新手。现在我让我的服务器创建两个线程来监听两个不同的端口,它们都会调用bind a port->listen()->accept()。然后有两个客户端分别连接到这两个端口。然后这两个线程将accept() 并生成两个文件描述符。我很好奇的是,生成的文件描述符有可能是相同的整数吗?

【问题讨论】:

  • 描述符是每个进程,而不是每个线程。

标签: c sockets


【解决方案1】:

文件描述符是你不应该解释的东西 - 所以知道这一点实际上“不是你的事”;)

在一个进程内,系统调用返回的文件描述符保证是唯一的。所以两个线程会收到两个不同的整数(其实多线程根本不影响这个问题,结果就好像两个socket都在主线程中打开了一样)。

【讨论】:

  • 可能值得一提的是,描述符将在一个进程的生命周期内被回收。
【解决方案2】:

它们可能是相同的整数,如果第一个线程在第二个套接字上的接受将创建一个新套接字之前关闭新套接字 - 文件描述符被回收。

【讨论】:

  • 在我看来,没有所谓的“关闭文件描述符”——一旦文件关闭,描述符就变成了一个任意整数。
  • @tofro,我倾向于同意,虽然我不确定这有什么实际意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
相关资源
最近更新 更多