我对C ++套接字编程有一些疑问。如果我问的方式错了,请帮助深挖,并帮助纠正。
答案 0 :(得分:3)
你很难找到比插座的“圣经”更有影响力的网络编程文本,W Richard Stevens:Unix Network Programming。套接字编程不是一夜之间就会出现的,所以不要指望它。这是一门简单明了的学科。并且,像所有学科一样,它需要磨练。
答案 1 :(得分:2)
OS级别的每个端口是否有一个文件描述符。
没有。如果您是服务器接受侦听套接字上的连接,则可能有10,000个文件描述符都引用相同的本地端口号。
多个端口如何使用相同的网络接口?它是否像处理器中的线程一样切换?那么,如果使用端口的数量增加,是否可以延迟特定端口的数据?
在这里回答太复杂了。
创建套接字时OS级别会发生什么?是否创建对IO文件描述符的任何引用?
它们是非常相似的东西,在某些操作系统中它们甚至是相同的东西。一个引用套接字,另一个引用打开文件。
然后在调用bind()时OS级别会发生什么。
端口和IP地址分配给套接字。 IP地址可以是0.0.0.0。如果指定的端口为零,系统将从空闲端口为您选择一个。
它如何互连套接字和网卡地址?
见上文。
使用可重复使用的套接字会发生什么?
没有“可重复使用的套接字”这样的东西。你在谈论重用端口吗?
在没有bind()的情况下发送或接收特定地址或端口?操作系统如何以及选择地址和端口是什么。
如果您尚未自己执行bind()
,则会在幕后执行bind()
。因此,相同的规则适用于{{1}},如上所述。
答案 2 :(得分:0)
我认为您应该阅读套接字编程,您要问的是基本概念,您应该了解服务器,客户端,TCP,UDP,本地主机,远程主机等术语。 socket()在进程和传输层之间创建一个接口,它创建并告诉套接字的特性。 bind()将套接字绑定到您的本地地址。 你可以查看手册页1或2,你会找到一个全面的答案。