mirror of
https://github.com/riba2534/TCP-IP-NetworkNote.git
synced 2026-06-30 01:46:15 +08:00
docs: 全面校对全部章节文档与示例代码
通过多智能体工作流对 19 章笔记(README.md)与 96 个 .c 示例代码做深度 审查与对抗性验证,修复 317 处确认问题,涵盖: 技术正确性: - 修复缓冲区溢出:echo_mpserv.c / echo_storeserv.c 等的 read(buf, BUFSIZ) 改为 BUF_SIZE(buf 仅 30 字节,BUFSIZ 远大于此) - 修复 open() 缺少 mode 参数:low_open.c / fd_seri.c / desto.c 等 O_CREAT 调用补 0644(原导致 low_read 链路失败) - 修复 feof 循环 off-by-one:news_sender.c / echo_stdserv.c 改用 fgets 返回值判断 - 修复线程竞态:chat_server.c / webserv_linux.c 的 &clnt_sock 栈地址 传子线程改为 malloc 分配 + free - 修复索引混淆:char_EPLTserv.c 错用 clnt_sock 查找改为 ep_events[i].data.fd - 修复格式化符:thread4.c 的 sizeof 用 %d 改为 %zu - 修正习题答案:ch01 fd 序号、ch13 MSG_OOB 加粗项、ch09 Nagle 等 文档规范: - 统一术语:IPv4/IPv6、接收(receive)/连接(connection) - 修正错别字:occured→occurred、cooffee→coffee、Usgae→Usage、 eerror→error、proess→process 等 - 修复病句、补全习题答案解释 - GitHub 绝对 URL 改为相对路径,统一项目引用规范 - 同步根 README.md(前言 + 19 章合并) 另:重命名 ch10/remove_zomebie.c → remove_zombie.c(修正拼写) 所有 .c 文件经 gcc 编译验证通过(ch17 epoll 文件因 macOS 无 sys/epoll.h 跳过,已人工复核)。
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
## 第二章 套接字类型与协议设置
|
||||
|
||||
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到,直接点连接可能进不去。
|
||||
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到,直接点链接可能进不去。
|
||||
|
||||
本章仅需了解创建套接字时调用的 socket 函数。
|
||||
|
||||
@@ -34,7 +34,7 @@ protocol: 计算机间通信中使用的协议信息
|
||||
| PF_PACKET | 底层套接字的协议族 |
|
||||
| PF_IPX | IPX Novell 协议族 |
|
||||
|
||||
本书着重讲 PF_INET 对应的 IPv4 互联网协议族。其他协议并不常用,或并未普及。**另外,套接字中采用的最终的协议信息是通过 socket 函数的第三个参数传递的。在指定的协议族范围内通过第一个参数决定第三个参数。**
|
||||
本书着重讲 PF_INET 对应的 IPv4 互联网协议族。其他协议并不常用,或并未普及。**另外,套接字中采用的最终的协议信息是通过 socket 函数的第三个参数传递的。在指定的协议族(第一个参数)和套接字类型(第二个参数)范围内,即可确定第三个参数(具体协议)。**
|
||||
|
||||
#### 2.1.3 套接字类型(Type)
|
||||
|
||||
@@ -52,9 +52,9 @@ protocol: 计算机间通信中使用的协议信息
|
||||
|
||||
这种情形适用于之前说过的 write 和 read 函数
|
||||
|
||||
> 传输数据的计算机通过调用3次 write 函数传递了 100 字节的数据,但是接受数据的计算机仅仅通过调用 1 次 read 函数调用就接受了全部 100 个字节。
|
||||
> 传输数据的计算机通过调用3次 write 函数传递了 100 字节的数据,但是接收数据的计算机仅仅通过调用 1 次 read 函数调用就接收了全部 100 个字节。
|
||||
|
||||
收发数据的套接字内部有缓冲(buffer),简言之就是字节数组。只要不超过数组容量,那么数据填满缓冲后过 1 次 read 函数的调用就可以读取全部,也有可能调用多次来完成读取。
|
||||
收发数据的套接字内部有缓冲(buffer),简言之就是字节数组。只要不超过数组容量,那么数据填满缓冲后通过 1 次 read 函数的调用就可以读取全部,也有可能调用多次来完成读取。
|
||||
|
||||
**套接字缓冲已满是否意味着数据丢失?**
|
||||
|
||||
@@ -62,7 +62,7 @@ protocol: 计算机间通信中使用的协议信息
|
||||
|
||||
套接字联机必须一一对应。面向连接的套接字可总结为:
|
||||
|
||||
**可靠地、按序传递的、基于字节的面向连接的数据传输方式的套接字。**
|
||||
**可靠的、按序传递的、基于字节的面向连接的数据传输方式的套接字。**
|
||||
|
||||
#### 2.1.5 面向消息的套接字(SOCK_DGRAM)
|
||||
|
||||
@@ -73,13 +73,13 @@ protocol: 计算机间通信中使用的协议信息
|
||||
- 传输的数据有边界
|
||||
- 限制每次传输数据的大小
|
||||
|
||||
面向消息的套接字比面向连接的套接字更具有传输速度,但可能丢失。特点可总结为:
|
||||
面向消息的套接字比面向连接的套接字传输速度更快,但数据可能丢失。特点可总结为:
|
||||
|
||||
**不可靠的、不按序传递的、以数据的高速传输为目的套接字。**
|
||||
**不可靠的、不按序传递的、以数据的高速传输为目的的套接字。**
|
||||
|
||||
#### 2.1.6 协议的最终选择
|
||||
|
||||
socket 函数的第三个参数决定最终采用的协议。前面已经通过前两个参数传递了协议族信息和套接字数据传输方式,这些信息还不够吗?为什么要传输第三个参数呢?
|
||||
socket 函数的第三个参数决定最终采用的协议。前面已经通过前两个参数传递了协议族信息和套接字数据传输方式,这些信息还不够吗?为什么要传递第三个参数呢?
|
||||
|
||||
> 可以应对同一协议族中存在的多个数据传输方式相同的协议,所以数据传输方式相同,但是协议不同,需要用第三个参数指定具体的协议信息。
|
||||
|
||||
@@ -99,8 +99,8 @@ int udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
|
||||
需要对第一章的代码做出修改,修改好的代码如下:
|
||||
|
||||
- [tcp_client.c](https://github.com/riba2534/TCP-IP-NetworkNote/blob/master/ch02/tcp_client.c)
|
||||
- [tcp_server.c](https://github.com/riba2534/TCP-IP-NetworkNote/blob/master/ch02/tcp_server.c)
|
||||
- [tcp_client.c](tcp_client.c)
|
||||
- [tcp_server.c](tcp_server.c)
|
||||
|
||||
编译:
|
||||
|
||||
@@ -231,7 +231,7 @@ gcc tcp_server_win.c -o hserver -lws2_32
|
||||
|
||||
> 答:①传输过程中数据不会消失②按序传输数据③传输的数据不存在数据边界(Boundary)
|
||||
|
||||
3. 下面那些是面向消息的套接字的特性?
|
||||
3. 下面哪些是面向消息的套接字的特性?
|
||||
|
||||
- **传输数据可能丢失**
|
||||
- 没有数据边界(Boundary)
|
||||
|
||||
Reference in New Issue
Block a user