一、什么是socket文件?
我们拿C语言的文件和socket对比举例说明
C语言文件是如何进行读写的:
- 文件信息==>open()==>write/read
socket套接字是如何进行数据传输的
- 数据==>socket()==>write/read/accetp/connect/setsocketopt等等....
从上面可以看出
- C语言的文件通过open函数打开,就可以使用write/read函数来对数据进行操作。
- socket套接字作为一种特殊的文件,可以通过这个socket来初始化一种网络协议,然后就可以通过一系列的函数(write/read/accept)来对这个网络协议进行初始化、传输等等操作
- 因此两者的原理都是相同的
socket定义
- Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议
二、socket在Linux内核中的结构
- socket在内核中其实就是一个结构体。这个结构体包含有ip、port、state、size等成员,这些成员都是用来初始化套接字的详细信息的,但是我们无法直接使用这些成员。因此Linux提供了相应的接口函数给我调用,我们通过这些函数来初始化socket结构体内的成员
图示:
结构体中
- ip、port:初始化IP地址和端口号
- state:当前网络服务的状态(监听/非监听)
- size:最大可连接的数量
因为这些结构体成员我们不可能直接操作,所以Linux提供了相应的接口函数给我们调用,来操作这些成员
- bind():绑定ip与端口号
- listen():监听
- ....等等还有很多其他函数