【发布时间】:2017-04-27 23:20:46
【问题描述】:
通过下面的 C 代码快照,我了解到,bind() 调用绑定到listfd 的地址是运行该服务器程序的本地机器的逻辑地址。随后,服务器侦听同一台机器的listfd 套接字。
struct sockaddr_in serv_addr;
listfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(8000);
retval = bind(listfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
listen(listfd)
我在coursera学到了---
也就是说,bind() 调用还允许您将套接字绑定到远程地址和端口。
我想明白这一点。
我的意思是,
listfd = socket(AF_INET, SOCK_STREAM, 0);
提供该程序正在运行的程序进程(本地机器)的文件描述符。
我的问题:
如果 bind() 调用将此本地套接字 listfd 绑定到远程地址而不是 INADDR_ANY,那么实际上是哪台机器在监听?因为listfd 是运行该程序的本地机器的本地进程文件描述符表中的一个条目,并且此套接字listfd 正在绑定到远程机器IP 地址?我该如何解释?这在后台是如何工作的?
【问题讨论】:
-
我怀疑 Coursera 的编辑不足。 “本地或远程地址”应简单地替换为“地址”。最接近“本地或远程”二分法的有意义的是“远程可见或本地可见”地址(如绑定到网络接口的地址与环回地址)。如果可以,请向 coursera 提交错误报告。
-
@Arkadiy Ah 远程可见,得到你