TCP网络编程需要考虑的问题

基于事件的非阻塞网络编程是编写高性能并发网络服务程序的主流模式,这种模式下,注册一个收数据的回调,收到数据会回调;注册一个接受连接的回调,接受到新连接之后会回调。

TCP网络编程最本质的是处理三个半事件:

  • 连接的建立
  • 连接的断开
  • 消息到达
  • 消息发送完毕

网络编程中的知识要点

(1)POSIX 信号处理

信号就是告知某个进程发生了某个事件的通知,又是也称为软中断。信号可以由一个进程发送给另外一个进程,也可以由内核发送给进程。每个信号都有与其关联的信号处理行为,我们可以提供一个函数,当特定的信号发生的时候调用函数,这种行为称为信号的捕获,有两种信号不能被捕获:SIGKILL 和 SIGSTOP,同时这两个信号也不能被忽略 。建立信号处置方法的函数是sigaction函数

  • SIGCHLD 信号是由内核在任何一个进程终止的时候发给它的父进程的一个信号,这个信号的默认行为是忽略,由于父进程忽略了该信号,导致子进程进入僵死状态。设置僵死状态的目的是维护子进程的信息,以便父进程在以后的某个时间获取,如果僵死进程的父进程终止了,则僵死进程将由init 进程继承。但是僵死进程占用内存空间,可能会耗尽内存空间,因此网络编程应注意

1、当fork 子进程时,必须捕获SIGCHLD信号;
2、当捕获信号时,必须处理被中断的系统调用;
3、SIGCHLD 信号处理函数必须正确编写,应该使用waitpid函数,以免留下僵死进程。

(2)accept 返回前连接中止

假设三路握手完成从而连接建立之后,客户TCP却发送了一个RST&

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值