#1 一般的私有服务器绑定端口时应该应该使用5001~49151区间内的端口. 0~1023为熟知端口, 1024~5000为传统BSD程序使用的临时端口, 49141~65535为一般系统分配时使用的临时端口. (Page.122)

#2 子进程在结束时会向父进程发送信号SIGCHLD, 父进程应使用wait*等函数来获取子进程的终止状态信息, 否则子进程会变成僵尸(APUE有介绍...忘记了). (Page.129)

#3 理所当然的, 信号既可以由内核产生(如SIGCHLD等等信号对应不同的情况), 也可以有进程产生(kill函数). (Page.129)

#4 一般来说大部分信号都可以通过sigaction函数设定一个指定的handler(可以用SIG_DEF重置, SIG_IGN设为忽略: 信号来了就像没来一样, "slow system call"不会被中断)来捕获. 但是SIGIO, SIGPOLL和SIGURG仍然需要额外的操作来捕获这些信号. 而SIGKILL和SIGSTOP不能被忽略(貌似连捕获都不能?). (Page.129)

#5 signal函数一般会重启被中断的"slow system call"(利用SA_RESTART, 但是有些系统调用绝大部分系统都不会重启, 如select), 但是由SIGALRM引起的中断不会被重启. (Page.130, 134)

#6 可以设置mask来阻止信号的到来, 但是被阻止的信号不是被删除, 而是被保存起来, 等到mask解除之后, 信号仍然会发送到进程中. 如果有多个相同的信号SIGXXX发送到一个设置了mask的进程, 那么只会保留这个信号SIGXXX的一个副本, 也就是说, 解除mask后进程只会收到一个SIGXXX. (Page.131)

#7 捕获一个信号进入信号处理函数, 在处理过程中如果又来了一个相同的信号, 那么这个新的信号会被阻塞(如先后两个子进程结束, 那么就先后发送两个SIGCHLD). 可以设置成不阻塞(SA_NODEFER). (Page.131)

#8 僵尸状态的目的是为父进程维护子进程的终止信息: 进程号, 终止状态, 资源使用情况(CPU time, 内存等). (Page.132)

#9 "slow system call"是指那些可能会一直阻塞的系统调用(如accept, 对socket或pipe的read和write等等). 对磁盘的读写虽然可能会暂时的阻塞, 但是磁盘IO不是"slow system call". "slow system call"在阻塞是如果进程捕捉到信号并用处理函数处理, 那么"slow system call"可能会返回EINTR(如果被重启了就不会这样). (Page.134)

#10 connect不能重启, 如果connect返回EINTR, 那么应该用select之类的函数等待TCP三次握手完成. 如果是其他错误, 那么就只能close这个sockfd, 重新socket和再次connect. (Page.135)

#11 wait函数用于并行TCP服务器处理结束的子进程不可行, 因为wait不可以在非阻塞模式下工作. 如果多个子进程同时结束, 会出现#6中提到的只有一个SIGCHLD被保留的情况. 所以每次收到SIGCHLD, 应该以循环的方式把当前所有结束了的子进程的信息全部用非阻塞waitpid获取完. (Page.139)

#12 对收到RST的链接accept, errno = ECONNABORTED; write, errno = EPIPE; read, errno = ECONNREST. (Page.140, 142, 144)

#13 一方收到FIN后, 仍然可以向对方发送数据, 但是可能会收到RST. 如果对方使用shutdown来关闭发送(SHUT_WR), 那么本机可以继续发送而不收到RST; 但是如果对方通过close来关闭socket(发送FIN), 或者shutdown+SHUT_RD(这样不会发送FIN), 这种情况下继续发送数据就会收到RST, 如果close或shutdown+SHUT_RD时, 机子还有数据在缓存没有取出, 一样发送RST. (Page.141)

#14 对接收到RST的socket继续进行写操作的话, 会引发SIGPIPE, 无论是否捕捉这个信号, 写操作都会失败, errno=EPIPE. 对收到FIN的socket可以写, 但是对收到RST的socket不可以写. (Page. 143)

#15 一般通过心跳包(主动发送数据确定对方)或SO_KEEPALIVE(一定时间内没有数据交互关闭链接)来确定对方是否崩溃. (Page.145)

#16 使用结构体作为数据发送存在3个问题: 字节排序问题, 类型实现问题, 结构题对齐问题. (Page.150)

转载于:https://www.cnblogs.com/cenhao/archive/2011/08/07/2130133.html

Notes on UNPv1 Ch.5相关推荐

  1. python 堆叠柱状图 多列 复杂_[Python Study Notes]堆叠柱状图绘制

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  2. C_str的入门级notes

    嗯,受人所托,顺便整理的 英文渣 侵删. // 注释的部分是解说(废话)和不怎么重(kǎo)要(chá)的 错误请指正 #include <stdio.h> #include <st ...

  3. getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析...

    2013-07-18 21:35:58 getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析. char是字符型数 ...

  4. 【 Notes 】ML ALGORITHMS of TOA - Based Positioning

    这篇博文和NLS方法博文行文思路类似:[ Notes ]NLS ALGORITHMS of TOA - Based Positioning ML方法是NLS方法的一个推广版本,具体接着看: Assum ...

  5. Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.2. The Python language

    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.2. The Python language 1.2.2. 基本 ...

  6. 在Notes客户端如何打开隐藏视图

    问题描述: 在Domino 数据库中, 数据库设计者可以将视图设置为隐藏视图, 当视图被设置为隐藏视图后, 用户在打开数据库时无法看到这一视图. 那么, 用户是否可以在Notes 客户端中打开隐藏视图 ...

  7. Notes客户端重新配置批处理

    把以下代码拷贝到记事本,并保持为:Notes客户端初始化设置.bat 格式 @echo off cd "d:\lotus\notes\data" del desktop6.ndk ...

  8. 再读UNPv1:复习、实践、小结

    前言: 这算是第二次系统地阅读UNPv1,正如副标题,不希望写成书摘.缩写版,尽量多写写个人体会和获得的经验,因此很多地方都会从全书的角度来说明,而不仅仅限于某个章节内部. SCTP.信号驱动I/O. ...

  9. boost learn notes

    <?xml version="1.0" encoding="utf-8"?> boost learn notes boost learn notes ...

最新文章

  1. kettle spoon中“表输入”到“表输出”的乱码问题
  2. const 的学习(转载)
  3. android 第三方登录界面,Android App集成第三方登录与换肤指南
  4. 在网页中嵌入flash之标签
  5. 微信小程序UI组件、开发框架、实用库...
  6. linux检查防火墙是否阻挡端口,浅析linux查看防火墙状态和对外开放的端口状态...
  7. Python全栈开发之11、进程和线程
  8. 软硬交互代码示例_matlab交互式程序设计示例:[6]GUI界面编程1
  9. 2018年11月27日 分类与集合
  10. C++ Liberary websit
  11. 学习记录 | ZigBee协议栈实践——串口收发数据
  12. 常见sql注入语句和xss注入语句
  13. 电脑本地连接,电脑出现多个“本地连接”的解决方法
  14. PHP加密解密方法 阿星小栈
  15. flink报错:The types of the interface org.apache.flink.util.OutputTag could not be inferred.
  16. USB PD 等多协议快充方案
  17. 计算机报税流程,河南地税电子税务局电脑版纳税申报操作流程(图文)
  18. Java可以应用到哪些领域?
  19. “上升”华为碰撞“下降”联想
  20. 如何给未签收物流备注信息

热门文章

  1. 比量iOS6/iOS7, 3.5inch/4.0inch
  2. 网宿科技:向云服务商转型
  3. js基础——cssText
  4. Apache Rewrite实现URL的跳转和域名跳转
  5. oracle 数据库由Linux平台向Windows平台迁移
  6. 2020 RocketMQ安装
  7. lnmp改php版本,lnmp安装多版本PHP共存的方法详解
  8. smarty缓存文件里是php,php-smarty模版引擎中的缓存应用
  9. c++ java setobjectarrayelement_java中jni的使用:C/C++操作java中的数组
  10. linux必须运行在enforcing,设置 Selinux环境为 Enforcing模式