-1

我有一些关于 C++ 套接字编程的问题。如果我问的方式是错误的,请帮助深入挖掘,并帮助纠正。

  1. 操作系统级别的每个端口是否有一个文件描述符。
  2. 多个端口如何使用相同的网络接口?它是否像处理器中的线程一样切换?那么,如果使用端口的数量增加,是否可以延迟特定端口的数据?
  3. 创建套接字时操作系统级别会发生什么?是否创建对 IO 文件描述符的任何引用?
  4. 那么当调用 bind() 时在操作系统级别会发生什么。它如何互连套接字和网卡地址?
  5. 使用可重用套接字时会发生什么?多个套接字如何绑定到一个端口?那些在一个端口上切换的人会像线程一样吗?
  6. 在没有 bind() 的情况下发送或接收到特定地址或端口时?逻辑操作系统如何以及什么是选择地址和端口。
4

3 回答 3

3

您将很难找到比套接字的“圣经”更具影响力的网络编程文本,W Richard Stevens: Unix Network Programming。套接字编程不是一朝一夕的事,所以不要指望它会。这是一门学科,简单明了。而且,像所有学科一样,它需要磨练。

于 2012-09-24T04:47:19.683 回答
2

操作系统级别的每个端口是否有一个文件描述符。

不。如果您是在侦听套接字上接受连接的服务器,您可能有 10,000 个文件描述符都引用相同的本地端口号。

多个端口如何使用相同的网络接口?它是否像处理器中的线程一样切换?那么,如果使用端口的数量增加,是否可以延迟特定端口的数据?

太复杂了,这里就不回答了。

创建套接字时操作系统级别会发生什么?是否创建对 IO 文件描述符的任何引用?

它们是非常相似的东西,在某些操作系统中它们甚至是相同的东西。一个是指套接字,另一个是指打开的文件。

那么当调用 bind() 时在操作系统级别会发生什么。

端口和 IP 地址被分配给套接字。IP 地址可以是 0.0.0.0。如果指定端口为零,系统会从空闲端口中为您选择一个。

它如何互连套接字和网卡地址?

往上看。

使用可重用套接字时会发生什么?

没有“可重复使用的套接字”之类的东西。您是在谈论重用端口吗?

在没有 bind() 的情况下发送或接收到特定地址或端口时?逻辑操作系统如何以及什么是选择地址和端口。

如果您自己还没有执行A bind(),则在幕后执行A。因此,与上述相同的规则适用bind()

于 2012-09-24T10:53:59.340 回答
0

我认为您应该阅读套接字编程,您要问的是基本概念,您应该了解服务器、客户端、TCP、UDP、本地主机、远程主机等术语。socket() 在进程和传输层之间创建一个接口,它创建并告诉套接字的特性。bind() 将套接字绑定到您的本地地址。您可以查看手册页 1 或 2,您会找到一个全面的答案。

于 2012-09-24T06:45:26.083 回答