UNP第四章基本TCP编程-笔记

一些关于TCP socket编程的笔记,全部摘自UNP第四章内容。


一、connect函数

错误返回情况:

1、ETIMEOUT错误:TCP客户端没有收到SYN分节的响应

2、客户端收到的SYN的响应是RST(表示复位),这是一种硬错误(hard error),返回ECONNERFUSED错误。

主机产生RST分节的原因:

1) 当SYN到达服务器端,该端口无服务器进程在监听运行

2) TCP想取消一个连接

3) TCP接收到一个根本不存在的连接上的分节

3、客户端发出的SYN在中间的某个路由器上引发了一个"destination unreachable"(目的地不可达)ICMP错误,是一种软错误,返回EHOSTUNRECH或ENETUNREACH错误。


若调用connect失败,必须关闭当前socket,并重新调用socket。


二、bind函数

常见错误是 EADDRINUSE错误(地址已被使用)。

1)所有TCP服务器程序中,调用bind之前设置SO_REUSEADDR选项

2)当编写一个可在同一时刻在同一主机上运行多次的多播应用程序时,设置SO_REUSEADDR选项,并将所参加多播组的地址作为本地IP地址捆绑


三、close函数

对一个TCP套接字调用close将导致发送一个FIN。

但是,该套接字的真正清理和资源释放是等到其引用计数值达到0是才发生的。(注意并发服务器父子进程)

如果我们确实想在某个TCP连接上发送一个FIN,可以改用shutdown函数代替close。

如果父进程对每个accept返回的已连接socket都不调用close,将发生:

1.父进程将耗尽可用描述符

2.由于socket的引用计数值不为0,将妨碍TCP连接终止序列的产生,导致连接一直打开着。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值