让我们从socket说起......
linux下用文件描述符来对文件进行操作,文件描述符是连接用户空间和内核空间的枢纽:当打开或创建一个文件时,内核空间创建相应的结构,并生成一个整型的文件描述符返回给用户空间的进程。进程用这个文件描述符来对文件进行操作。以后的read,write等都要文件描述符来标识。
在linux下还有一类比较特殊的文件,即socket文件。
它是一种网络接口的抽象,是应用层到传输层或其他协议层的访问
接口
,
”其次,具体使用的套接口是与unix管道的某一端类似的东西,我们可以往这个口写数据,也可以从这个口读数据“
struct socket
{
socket_state state; //socket状态
unsigned long flags; //socket标志
const struct proto_ops *ops; //协议特定的socket操作
struct fasync_struct *fasync_list //异步唤醒列表
struct file *file; //文件指针
struct sock *sk; //内部网络协议结构
wait_queue_head_t wait; //多用户时的等待队列
short type; //socket类型
}
当调用sockfd=socket(AF_INET,SOCK_STREAM,0); 时,内核层会进行如下动作:1,创建一个socket结构;2,返回文件描述符
”注意这个时候还没有具体到 IP 地址或 端口,只是建立了一种socket类型的文件“