红联Linux门户
Linux帮助

linux文件描述符和套接字的问题

发布时间:2016-06-17 09:49:28来源:linux网站作者:Freeland丶

记得刚学linux的时候,就会听到一句"一切皆文件",上面标准输入、标准输出、标准错误、重定向 blablabla...

今天在写一个基于epoll的聊天室,客户端fork 父进程负责读,子进程负责写,感觉这好像服务端,主从备份..还像nginx中的进程的模型,各个worker 从 listen 后的 master fork出来的 master负责分发,worker负责处理,主要是映射到各个模块进行处理,所以说nginx 真正工作的是各个模块.其实 以上都是我学习的一些感受,时常联系在一起,做一些对比,感觉很有意思,也会加深理解.


我们知道 linux下 0 是标准输入,1是标准输出,2 是标准错误,当然以上所得是文件描述符=,其实套接字底层也是文件描述符,只不过这个文件描述符的功能不同罢了,文件描述符 和内存有很大的关系,以下这个命令可以查看:

cat /proc/sys/fs/file-max  394682

这一点在nginx中体现的更鲜明一点,因为nginx需要处理客户端的连接,所以要维持与客户端的socket连接,高并发,因此维持很多这样的socket。

linux文件描述符和套接字的问题


以上可以看到服务端先创建一个文件描述符 3,然后在内核又创建一个epollfd 句柄 为 4

int epoll_create(int size);是这个函数来做的

所以在epoll 用完之后要记得 close,否则有可能导致fd消耗殆尽.

linux文件描述符和套接字的问题

新建立一个客户端连接到server fd 为 5。


本文永久更新地址:http://www.linuxdiyf.com/linux/21584.html