关于connection reset by peer问题

今天在验证UNP(v3)第五章中的5.12例子。例子是这样的:一个回射服务器,一个客户端。客户端从终端接收输入,然后发给服务器。服务器只是简单的把字符串返回给客户端。然后客户端再显示到终端。书上让我们这样做:服务器和客户端正常连接后,把服务端子进程kill掉,这样的话,服务端会发送一个Fin包到客户端,而客户端收到这个Fin包后立即响应Ack包。但是客户端此时正阻塞在fgets上面。接着,我们随便输入个字符串,客户端就打出个信息"server terminated prematurely"。这些都好理解。问题在书上的几行小字。小字说:“上述讨论还取决于本例子的时序。客户调用readline既可能发生在服务器的RST被客户收到之前,也可能发生在收到之后。如果readline发生在收到RST之前,那么客户得到一个EOF,就得到"server terminated prematurely";否则结果是由readline返回一个ECONNRESET”。


但是我在Red Hat Enterprise Linux Server release 5.4上没有看到后一种情况出现。也就是说不管readline在收到RST之前还是之后,客户端的readline始终返回0。我的做法是在客户端的write和readline之前sleep一下。客户端write时,马上会收到一个RST,然后接着readline发现还是返回0。按书上的说法,这应该返回ECONNRESET错误的。不知道这是不是和内核有关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值