原先曾以Socket编程为入口开始自己的新的学习,毕竟未曾致用,时至今日已比较生疏。借着阅读《UNIX网络编程(卷一)》(简称UNPv1)的机会,正好复习一番,而且希望将新的感受记录下来。一些技术细节翻阅原书即可,点到为止,不在这篇博文详述。

  作者推荐在网络编程中使用snprintf()代替sprintf()、用fget()、strncat()和strncpy()分别代替gets()、strcat()和strcpy();同时提到了更好的替代函数strlcat()和strlcpy()。具体原因是前者的调用会使缓冲区溢出,而这是黑客网络入侵的一种方式。snprintf()需要缓冲区长度作为显式参数,超过缓冲区尾端的字符都将被抛弃。其余函数情形类似。

        ----第1章 简介,1.5 一个简单的时间获取服务器程序

  再看TCP状态转换图,发现以前忽略了一些细节:除了三路握手、关闭连接的一些典型状态,还有由于双方同时发送SYN造成的同时打开;同时发送FIN造成的同时关闭;以及TIME_WAIT状态存在的理由:最后的ACK可能丢失,使这次连接老的分组自然消逝。

        ----第2章  传输层:TCP、UDP和SCTP,2.6 TCP连接的建立和终止

  SCTP是相对而言比较新的协议,同时以前从未接触过。面向连接按序递送的消息、所连接端点之间多个流、单个端点支持多个IP 地址是目前所了解的SCTP的特征,四路握手、拆连亦与TCP不同。

        ----第2章  传输层:TCP、UDP和SCTP,2.8 SCTP关联的建立和终止

  虽然和TCP一样都有应用进程缓冲区(TCP可以是任意大小),但UDP的套接字发送缓冲区实际上是不存在的,通常过程是把应用进程缓冲区内容复制到某一个内核缓冲区,发送后即丢弃。

        ----第2章  传输层:TCP、UDP和SCTP,2.11 缓冲区大小及限制

  关于开发包裹函数readn()、writen()的必要性在于,不同于文件读写,使用read()和write()时,内核提供的套节字缓冲区在某个时刻可能不足以放下所应输入或输出的n个字符,这时便要重复调用read()或write()以达到目的,在未结束前完成n个字符的输入或输出。

        ----第3章  套接字编程简介,3.9 readn、writen和readline函数

  listen()的第二个参数backlog涉及到内核对于监听套接字维护的两个队列的机制。这两个队列存放的是ESTABLISHED和SYN_RCVD状态的排队的套接字之和,最初的设计是,这个和等于backlog。然而目前的实现并不明确,而且在不同的UNIX实现中,实际已排队连接的最大数目一般比backlog稍大一些。顺便提一下,在对这两个队列有所了解之后,就不难明白accept()如何获取一个ESTABLISHED的连接并赋予它一个套接字结构的了。

        ----第4章  基本TCP套接字编程,4.5 listen函数

  select()中间的三个参数readset、writeset和exceptest会在返回时把代表某一位就绪的描述符置为1,未就绪置为0,因此每次调用select()时应该先把关心的位置为1。

        ----第6章  I/O复用:select和poll函数,6.3 select函数      

  对于线程私有数据相关机制和使用,UNP比APUE介绍的要全面一些。每个进程都有一个key结构,它由系统维护,存放某个索引号的线程私有数据是否在被使用的标志和析构函数,而私有数据本身由存放某一个线程信息的Thread中对应的指针访问(这是笔者在阅读了P543至544相关内容后自己的理解)。相关函数的使用方法比较典型,记录在下面。my_read和readline的关系是,readline调用my_read,先读入需要的全部数据进入自己的缓冲区,每次返回一个,循环至readline通过调用读取完毕。

使用线程私有数据的readline函数

        ----第26章 线程,26.5 线程特定数据

  编写SCTP程序需要注意几个地方:开启内核支持(2.4及以下不支持)、安装运行库、编译时需要-lsctp选项。

  tcp_connect()利用getaddrinfo()屏蔽了很多细节操作,屏蔽了IPv4和IPv6在填充地址结构的差别,确实很有价值。

(549~560涉及到非阻塞I/O,未读)

  目前手上有其他工作要做,UNP的第三部分高级套接字编程就不再精读,全书作为以后查阅时参考的手册。

本文转自五岳博客园博客,原文链接:www.cnblogs.com/wuyuegb2312/archive/2012/06/19/2446058.html,如需转载请自行联系原作者

再读Socket编程——《UNIX网络编程(卷一)》学习点滴相关推荐

  1. Unix网络编程卷一第三章笔记

    前言 这篇文章主要是Unix网络编程卷一第三章的个人笔记 1.POSIX 规范的三个字段 sin_family sin_addr sin_port 2.IPV4 套接字结构 五个套接字结构 IPV4( ...

  2. linux下网络编程设置非阻塞,UNIX网络编程 非阻塞connect的实现

    一.<UNIX网络编程>-非阻塞connect 在一个TCP套接口被设置为非阻塞之后调用connect,connect会立即返回EINPROGRESS错误,表示连接操作正在进行中,但是仍未 ...

  3. UNIX网络编程卷1 回射客户程序 TCP客户程序设计范式

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 下面我会介绍同一个使用 TCP 协议的客户端程序的几个不同版本,分别是停等版本.select ...

  4. UNIX网络编程学习笔记(代码超详细解析)(持续更新)

    1. 其他函数准备 1. TCP 回射服务器程序: str_echo 函数 #include "unp.h"void str_echo(int sockfd) {ssize_t n ...

  5. unix网络编程 str_cli epoll 非阻塞版本

    unix网络编程 str_cli epoll 非阻塞版本 unix网络编程str_cli使用epoll实现讲了使用epoll配合阻塞io来实现str_cli,这个版本是配合非阻塞io. 可以看到采用非 ...

  6. Unix网络编程---第三次作业

    Unix网络编程---第三次作业 要求: 利用多线程技术实现如下并发网络程序,要求对上课时的实现进行完善,利用线程专用数据TSD实现. 服务端: 服务器等待客户连接,连接成功后显示客户地址,接着接收该 ...

  7. unix网络编程之简介和运输层TCP/UDP

    前言:本文只介绍了有关UNIX网络编程的理论知识,具体的应用和例子在稍后的博文中将更新 第一章  简介 一个简单的服务器程序步骤: 说明:1.创建TCP套接口 2.捆绑服务器的众所周知端口 3.把套接 ...

  8. Unix网络编程之-------unp.h头文件详细配置-1

    unix网络编程unp.h最详细全面配置说明 今天开始学习Unix网络编程这本大神之作了,由于之前在学习另外一本杰作Unix环境高级编程,遇到过第一个程序编译报错的情况,知道这是大神自己写的头文件在我 ...

  9. UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订)...

    UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订) 基本信息 原书名: Unix Network Programming, Vol ...

最新文章

  1. 主机端实时获取Hololens2的RGBD数据流
  2. Matlab编程与数据类型 -- 开关语句switch/end
  3. JAVA 中equals()与==的区别
  4. RDKit | 基于RDKit和Python的阿斯利康ADME数据集分析
  5. linux内核网络协议栈--2层报文处理(十七)
  6. LINUX IP命令详解
  7. linux tar.gz指定目录,tar.gz包内提取某个文件在指定目录下。
  8. Ocelot统一权限验证
  9. 同步工具之Semaphore信号量
  10. centos连接xrdp桌面黑屏_小鹅通|视频直播桌面共享模式|视频直播OBS使用教程
  11. java excel工程_java工程積累——向office致敬:有一種依賴叫excel
  12. 实例协议分析RFC1483:AAL5和几种常见ADSL接入技术
  13. android 截屏 分享,Android应用内截图分享的实现记录
  14. Learning-MySQL【4】:表的操作管理和 MySQL 的约束控制
  15. Delphi 鼠标移动
  16. 小米路由器R1C或R1CM小米R1C 原厂Bootloader和epproom
  17. 1168: mxh对lfx的询问(前缀和+素数表)
  18. VB中如何声明及使用多维数组,多层数组及动态数组
  19. 如何使用 Kubernetes 部署 Flink 应用
  20. PaddleWeekly | 量化图像感知相似度,这款工具箱超好用!

热门文章

  1. java 内部错误2753_重新安装java出现错误的解决方法
  2. android开发actionbar,Android 开发之为ActionBar 添加Actionbar Button
  3. c++ windows 光标操作_电脑操作常用快捷键
  4. 华为的型号命名规则_iQOO新品入网;三星Galaxy S21首张官方渲染图曝光;华为nova8真机曝光...
  5. 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...
  6. Part Six 地理定位API
  7. mysql的索引类型_带您了解mysql索引类型
  8. java中的命名空间_XPath与Java中的命名空间
  9. python的抽象类详解_第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类...
  10. [VB]用记录集填充表格函数