Linux下的socket通信小程序分享
作者:网络转载 发布时间:[ 2014/10/30 11:24:08 ] 推荐标签:Linux 程序 操作系统
服务端和客户端代码有一些相似的地方。说一下不一样的地方把。打字打的手要抽了都。
行11:意思是通配本主机上所有的网络接口(如果有多个的话).是不管哪个接口受到请求都去处理连接
行13:把sock文件符绑定到指定的地址和端口上,形成一个完整sock。
行15:服务端sock打开侦听文件符,不同的sock过来建立连接是要排队的,第二个参数控制大排队的数量,毕竟缓冲区是有限的
行22:服务端进入侦听后回阻塞在accept,如果一个tcp三次握手成功了,打开一个accepted_fd,并建立一个通道。继续往下走
行23:链接错误或者链接被内核中断,会返回小于0,因为这时进程处在一个可被中断的睡眠状态。如果进程接到要去处理进程的通知,这个睡眠会被唤醒,而且 内核不一定回重启这个等待,不重启的时候回返回一个errno=EINTR(error interrupt),这时,我们重新启动这个等待 , continue
行32:这里有个比较重要的函数 fork,它是系统能创造分支进程的方法,是子进程。
QA-01:为什么这里要开进程。 A:因为如果有多个链接连入服务器的话,一个进程肯定忙不过来阿,这样会导致很对在那排队等待,有的甚至连不上,因为服务起很忙。
QA-02:if((pid=fork())==0) ,为什么这里这么写呢?因为 这个fork函数很特别,调用一次会返回两个值,一个是子进程的pid,一个是0 。类似于一个链表格式 ppid | pid |chldpid ,子进程pid在父进程里返回,子进程返回0 。进入子进程后,父进程的所有文件符都会复制到子进程的上下文,是的,是复制。子进程对文件符的操作不会影响父进程,父进程也不会影响子进程。子进程执行完毕后必须 退出,否则的话 可能会继续fork子进程,死循环。
这样以来,每次成功建立连接都会有一个独立的进程去处理他们的数据交流,不会阻塞在父进程,完成了 并发处理。
行43:这里为什么要关闭 connected fd呢,因为如果不关闭的话,每来一个链接都会新建一个fd(file describe),少年,内核里进程表表项里存储文件符的数组大小可是有限的。这里子进程也会关掉从父进程复制来的文件符,这个文件符是有计数的,称谓共享,当计数恢复0时,文件符关了。
后说行18:捕获信号。 当这些个子进程都完成自己任务后 ( 也是客户端断了之后 ),不会自动退出内核。而是变成了 defunct 状态,挂掉了。木错,是挂掉了!
为什么儿子们都挂掉了,老爹不来收尸呢? 这个原因貌似是比较复杂,因为子进程结束了,要通知父进程一些关于自己执行情况的数据 。父进程默认是忽略的,等父进程结束的时候,这些 僵死进程会 被只给 进程 1, init,他恢复则处理这些 挂掉的进程。
但是我们的服务起 肯定不想让这些 挂掉的进程 挤满内存,占据资源,于是在 行18 捕获子进程发来的信号 SIGCHLD ,然后,进程如果接到信号会从睡眠中苏醒,去 wait 它,这个函数很特别,他会负责处理掉这些挂掉的进程。
好吧,服务端是比较复杂,这里代码肯定是有很多缺陷的。一个服务要想跑起来 要考虑非常多的突发情况,攻击神马的,这个小程序只是打通通信过程,呵!呵!
写到这里,我又凌乱了.....睡觉
机智的少年 估计去开发局域网聊天程序了 o(∩_∩)o...
哦,忘了上截图,sorry ,所谓无图无真相:
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Linux下开源的DDR压力测试工具曝Linux恶意软件:让树莓派设备挖掘数字货币linux系统中不同颜色的文件夹及根目录介绍软件测试工程师必知必会Linux命令Linux下DNS服务器配置如何成为不可替代的Linux运维工程师?详解Linux进程(作业)的查看和杀死Linux 日志定时轮询流程详解比特币勒索病毒不只Windows系统有,Linux版的来了Linux日志定时轮询流程详解Linux iommu和vfio概念空间解构Linux系统如何低于TCP洪水攻击Linux无损调整分区大小Linux下防火墙配置实例Linux使用Jexus托管Asp.Net Core应用程序Linux中引号的那些事
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南