UNIX网络编程(第1卷)

[美] W. Richard Stevens

出版时间

2001-01-31

ISBN

9787302035480

评分

★★★★★
书籍介绍
这不是一本读一遍就能上手写代码的书。几乎所有认真读过的人都会说:第一遍看,云里雾里,必须把TCP、UDP在真实网络里反复debug若干次,再回头翻,'感觉'才会慢慢到来。正因如此,它更像一本值得反复咀嚼的辞海——从socket、connect、bind、accept这些函数如何被内核调度,到time_wait状态为何存在、为何要保留旧重复段,每一处都讲得极细。书里'包裹函数'的设计、字节序处理、通过服务名而非端口号查表等细节,是它区别于速成教程的地方。需要提醒的是:翻译质量参差(有读者直言是'金山快译'出品),且部分内容已显陈旧。它适合愿意先掌握'如何写出简单网络程序'、再回头啃《TCP/IP详解》的开发者,而非追求一步到位的速读者。
AI导读
核心看点
  • 全面深入讲解套接口API网络编程标准
  • 涵盖IPv4与IPv6互操作性及高级主题
  • 提供客户-服务器程序完整设计方法
读者共识
  • 网络编程领域的权威经典之作
  • 内容详尽但初读可能较为晦涩
  • 理论与实践结合方能融会贯通
精彩摘录
  • "There are two reasons for the TIME_WAIT state: 1. To implement TCP's full-duplex connection termination reliably. 2. To allow old duplicate segments to expire in the network."
  • "既然发生错误时终止程序的运行是普遍的情况,我们可以定义包裹函数(wrapper function)来简化我们的程序。包裹函数调用实际函数,检查返回值,并在发生错误时终止进程。 int Socket(int family, int type, int protocol) { int n; if ( (n = socket(family, type, protocol)) < 0) err_sys("socket error"); return(n); }"
  • "even though addr is a char*, you actually want to pass in a pointer to a struct in_addr."
  • "If we refer to a service by its name in our code, instead of by its port number, and if the mapping from the name to port number is contained in a file (normally /etc/services), then if the port number changes, all we need to modify is one line in the /etc/services file instead of having to recompil"
  • "如果有多个客户连接同时到达,系统内核在最大数目的限制下把它们排入队列,然后每次返回一个给accept函数"
  • "网际协议簇,在TCP与UDP之间留有一个间隙,指出应用程序可以绕过传输层而直接使用IPv4或Ipv6,称为raw socket"
  • "Posix并不是一个单一标准 第一个Posix标准涉及:进程原语(fork, exec,信号及定时器),进程环境(用户ID,进程组),文件与目录(所有I/O函数),终端I/O,系统数据库(保密字文件和用户组文件),以及tar和cpio归档格式。"
  • "注意,TCP并不保证数据一定会被对方端点接收,因为这是不可能做到的。如果可能的话,TCP就把数据投递到对方端点,否则就(通过放弃重传并中止连接这一手段)通知用户。这么说来,TCP也不能被描述成是100%可靠的协议;它提供的是数据的可靠投递或者故障的可靠通知。"
目录
前言
第l部分 简介和tcp/ip
第1章 简介
1.1 概述
1.2 一个简单的时间/日期客户程序

显示全部
用户评论
内容有点老了,后半部分基本可以忽略。
经典力作,无需多言,不知第3版如何。
还是圣经!
讲解非常详细 需要多次阅读体会 结合实际经验再回头看
W. Richard Stevens的网络经典,第二卷继续...........
这本(套)经典第一遍读起来一定是云里雾里,等把tcp,udp协议debug若干次,再回头多看几次,感觉就会来了
求书
收藏