socket()和bind()的行为如何

how socket() and bind() behave?

本文关键字:bind socket      更新时间:2023-10-16

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

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

你很难找到比套接字的"圣经"W Richard Stevens:Unix网络编程更具影响力的网络编程文本。套接字编程不是一蹴而就的事情,所以不要指望它会发生。它是一门简单明了的学科。而且,就像所有学科一样,它需要磨练。

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

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

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

太复杂,无法在此处回答。

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

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

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

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

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

请参阅上文。

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

没有所谓的"可重用套接字"。您是在谈论重用端口吗

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

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

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