Unix网络编程(卷1)—笔记

原创 2015年11月24日 20:52:40

1、unix域字节流套接字的 connect调用发现监听套接字的队列已满,调用立即返回ECONNREFUSED错误。TCP套接字(P86)的connect调用发现监听套接字队列已满,则忽略新到达的SYN分节,而TCP的连接端将数次发送SYN进行重试。P327
对于三次连接,需要详细阅读P84 listen函数。

2、unix域数据报,客户端必须显示的调用bind将客户端的地址(struct sockaddr_un,主要是设置路径)绑定到客户端的socket上,否则在服务器端调用recvfrom时收不到客户的地址结构,而无法给客户发送数据。
而UDP套接字,可以不用显示调用bind绑定客户端地址结构,会默认指定一个临时端口,以及发出时指定出口IP地址。P330

3、connect
对于UDP来说,并不使一个连接真正建立,而只是内核保存对端的IP地址和端口号。P196
非阻塞TCP套接字调用connect,会返回一个EINPROGRESS的错误(当客户与服务端在同一个主机的情况下,连接可以立即建立)。

4 、非阻塞的connect如何判断其连接成功 P354
1.调用getpeername代替getsockopt.如果调用getpeername失败,getpeername返回ENOTCONN,表示连接建立失败,我们必须以SO_ERROR调用getsockopt得到套接口描述符上的待处理错误;
2.调用read,读取长度为0字节的数据.如果read调用失败,则表示连接建立失败,而且read返回的errno指明了连接失败的原因.如果连接建立成功,read应该返回0;
3.再调用一次connect.它应该失败,如果错误errno是EISCONN,就表示套接口已经建立,而且第一次连接是成功的;否则,连接就是失败的;

5、被中断的connect
如果在一个阻塞式套接口上调用connect,在TCP的三路握手操作完成之前被中断了,比如说,被捕获的信号中断,将会发生什么呢?假定connect不会自动重启,它将返回EINTR.那么,这个时候,我们就不能再调用connect等待连接建立完成了,如果再次调用connect来等待连接建立完成的话,connect将会返回错误值EADDRINUSE.
在这种情况下,应该做的是调用select,就像在非阻塞式connect中所做的一样.然后,select在连接建立成功(使套接口描述符可写)或连接建立失败(使套接口描述符既可读又可写)时返回;

6、非阻塞的accept
本来不需要一个非阻塞的 accept, 因为如果我们使用select在某个监听套接字上等待一个外来的连接,当有一个已经完成的连接准备好被accept时,select将作为可读描述符返回该监听套接字,那么接下来的accept就不会被阻塞,因为select已经告诉了我们有连接准备好了。
但是有一种情况是,在select通告我们有连接准备好和在accept之间,收到了客户的RST终止连接,那么接下来的accept还是会被阻塞,等待其他新的连接准备好。 P362

7、带外数据
所有套接字选项会从监听套接字传承给已连接套接字,因此有些套接字选项的设置应该在已连接套接字之前设置,即在accept返回之前。
特点:
即使因为流量控制而停止发送数据了,TCP仍然发送带外数据的通知(即伴随紧急标志的URG标志已经设置),但是本身的带外数据不一定随同送出。
读操作总是停止在带外标记上。P514
当带外数据通知到达时,内核向属主进程发送一个SIGURG信号。
当带外数据通知已发送,接收进程准备读取带外数据时,若带外数据未在接收缓存中,那么recv返回EWOULDBLOCK。
每个TCP连接只能存储一个带外标记。P518

8、异步错误
P194 P526

《UNIX网络编程(卷1):套接字联网API(第3版)》带目录 高清完整PDF版

  • 2012年10月24日 09:11
  • 85.39MB
  • 下载

《Unix网络编程卷1-套接字联网API》第一个例子编译

第一个例子:一个简单的时间获取客户程序,利用GCC编译会出错,需要查看源码中的README文档。下载源码 unpv13e解压,可看到README文档,打开可看到:Execute the followi...
  • lidna242
  • lidna242
  • 2015年07月24日 21:32
  • 602

Unix网络编程卷1源代码使用

几乎linux 编程0基础,花了半小时还是在我虚拟机里运行出第一个例子daytimetcpcli了: 主要步骤: 1,下载源代码,解压 2,配置这本书里面的环境(暂时不懂,不用纠结) 3,下载、启...
  • xinpo66
  • xinpo66
  • 2015年07月18日 10:51
  • 2039

《UNIX网络编程卷1》读书笔记--第五章TCP客户/服务实例

前言 本章开始编写一个完整的TCP客户/服务器程序实例。 (1) 客户冲标准输入读入一行文本,并写给服务器 (2)服务器从网络输入读入这行文本,并回射给客户 (3)客户从网络读入这行回射...
  • mashuiping
  • mashuiping
  • 2017年03月24日 11:39
  • 216

《UNIX网络编程卷1:套接字联网API》读书笔记- 基本 TCP 套接字编程(1)

套接字地址结构#include IPv4套接字地址结构IPv4套接字地址结构也称为“网际套接字地址结构”,以 sockaddr_in 命名struct sockaddr_in { sin_fa...
  • u012425036
  • u012425036
  • 2016年08月28日 12:08
  • 304

《unix网络编程》(1)源代码的使用方法

《unix网络编程(卷1)》源码下载地址 可以从这里免费下载源码 Ubuntu下源码的使用方法 将下载的源码在Ubuntu下解压;控制台内进入解压后源码所在的目录。 打开文件README,其内容如下:...
  • u013074465
  • u013074465
  • 2015年03月15日 20:27
  • 2025

Unix网络编程(卷一)-第一个简单的时间获取程序

1 前言 自己一直想闹明白Unix网络编程到底是怎么一回事,所以开启这个系列文章。这个文章系列将会持续下去,直到不再Coding为止。 2 运行第一个实例 这篇博客是《Unix 网络编程卷一:套接字联...
  • shenwanjiang111
  • shenwanjiang111
  • 2016年09月06日 18:37
  • 1288

《Unix网络编程》卷1:套接字联网API(第3版):基本TCP编程、TCP客户端/服务器程序、I/O复用

全书共31章+附录。 计划安排:吃透这本书,一天三章+源码,并实测代码做当天笔记,CSDN见。 时间安排:计划时间1.5个月 == 6个周末 == 12天。 2017.08.05    第01-03...
  • sinat_36184075
  • sinat_36184075
  • 2017年08月06日 21:39
  • 410

学习《UNIX网络编程卷一》笔记

学习《UNIX网络编程卷一》笔记
  • zhang_yin_liang
  • zhang_yin_liang
  • 2017年04月11日 16:11
  • 505

UNIX网络编程卷一:套接字联网API(学习笔记一)

UNIX网络编程卷一:套接字联网API(学习笔记一)
  • xidian208
  • xidian208
  • 2015年06月25日 22:18
  • 724
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unix网络编程(卷1)—笔记
举报原因:
原因补充:

(最多只允许输入30个字)