int socket()函数创建的是套接字socket,返回的是socket描述符(套接字描述符),其实就是文件描述符,socket(套接字)其实就是文件

socket()创建了套接字(文件),只是开放了本地系统上面的一个开放资源,如果想其他进程与这个套接字进行通信,需要地址(名字)。

传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

也就是struct sockaddr,套接字地址结构包括1、协议族类 2、端口 3、ip地址

为什么服务器需要bind(serverfd,struct sockaddr_in);

因为socket()创建的只是套接字,没有名字(地址),其他进程无法访问,或者与它通信,只有绑定了一个套接字地址,才能找到它,与它通信。服务器由于是固定ip地址和端口号的,所以必须与固定的套接字地址bind

如果一个TCP客户或者服务器未曾调用bind捆绑一个端口,当调用connect或listen时,内核就要为相应的套接字选择一个临时接口。当我们调用socket创建一个socket时,返回的socket描述字它存在于协议族(address family,AF_XXX)空间中,但没有一个具体的地址。如果想要给它赋值一个地址,就必须调用bind()函数,否则就当调用connect()、listen()时系统会自动随机分配一个端口。

也就是client端的socket其实也是要有名字的,但是这个端口号是随机分配的(由内核分配)这个过程由于connet()产生。

对于INADDR_ANY的理解:本地的所有的ip地址的任一个,如果只有一个ip地址,就是本身ip

知道在listen之前需要先bind一下,用来确保socket能在某个固定的端口监听。而bind的时候,函数参数中的端口填自己将要绑定的端口就行;而IP地址,需要填本机的IP,但是也可以用一个宏INADDR_ANY代替,用这个宏就可以不用查找本机的IP,它就可以代替本机的IP。当时只觉得这个INADDR_ANY比较神奇,但是由于当时觉得用起来很方便,也没出啥问题,也就没有再深究。

就在发现bind的这个机制的同时,我发现其实bind对于源地址也同样具备这种处理方式,当系统具有多IP(多网卡)的情况,当我们把bind函数中的ip参数置0时,就是由内核自己选择分配IP。而之前一直觉得很神奇的INADDR_ANY其实一点也不神奇,它的值其实就是0。所以当我们只有单一IP的时候,我们就可以用INADDR_ANY去代替那个单一的IP,因为内核分配的时候只能选择这一个IP。从而造成了INADDR_ANY就是本机IP的现象。

最新文章

  1. [转]ubuntu linux下DNS重启后丢失
  2. 利用OpenShift托管Node.js Web服务进行微信公众号开发
  3. Blitz Templates介绍
  4. IIS7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。=
  5. Tiny Spring 分析一
  6. 当有多于64合乎逻辑的cpu时刻,Windows 下一个Oracle db 实例启动(startup)什么时候会hang(待定)
  7. 【推荐分享】Python电子书,视频教程(Let's Python系列视频教程等)(百度网盘)
  8. [Android开发常见问题-12] Android开发中debug.keystore如何使用。
  9. SSH深度历险(三) EJB Session Bean有状态和无状态的区别与联系
  10. angular5与angular6的比较
  11. Java并发编程:volatile关键字解析zz
  12. FortiGate外网IPSec链路及运维专线链路到个别网段不通
  13. 高通adsp架构下sensor
  14. Angularjs中config中置入以下拦截器
  15. mysql之我们终将踩过的坑(优化)
  16. 2018面向对象程序设计(Java) 第2周学习指导及要求
  17. 【ASP.NET】ASP.NET如何发布Web项目
  18. Leetcode 526
  19. Django 2.0.1 官方文档翻译:编写你的第一个 Django app,第六部分(Page 11)
  20. memcached的常用命令

热门文章

  1. DataGridView上下方向键定位
  2. Centos 7.2 安装稳定版 nginx
  3. delphi 从 TWebbrowse组件中获取图片
  4. jstl 判断 null
  5. 第二天:tomcat体系结构和第一个Servlet
  6. js原型及原型链
  7. day18-事务与连接池 5.关于不考虑事务隔离性出现的问题
  8. static、静态变量、静态方法
  9. 杭电acm 1015题
  10. 图--生成树和最小生成树.RP