原帖由 scutan 于 2007-12-22 15:03 发表
想请教一下, 我有两台机器在通信, PC1, PC2, 当PC1要向PC2发送数据的时候, 我把PC2的网线断掉, 此时PC1在调用write()的时候, write()会成功返回, 并且返回写入内核的字节数, 但是PC1由于没有收到PC2的ACK包, 会 ...
原帖由 思一克 于 2007-12-22 21:50 发表
你这是好方法吗?
不是。速度会慢许多许多。
"那么平时编网络程序时应该如何来解决这种问题呢? 我现在也只是在应用层自己制定了一种协议, 即在write之后就调用read, 通过read的返回值来判断. 不知道各位还有 ...
原帖由 xhl 于 2007-12-22 20:35 发表
我没怎么看明白你的 问题, 给你点建议, 也许不是你的问题的 答案。
windows linux 还有部分 unix kernel已经提供了 tcp keepalive的 能力,
你只需要用 setsockopt 设置己个 arg就可以了 keepali ...
原帖由 思一克 于 2007-12-22 21:50 发表
你这是好方法吗?
不是。速度会慢许多许多。
"那么平时编网络程序时应该如何来解决这种问题呢? 我现在也只是在应用层自己制定了一种协议, 即在write之后就调用read, 通过read的返回值来判断. 不知道各位还有 ...
原帖由 scutan 于 2007-12-23 14:38 发表
嗯. 谢谢, 这种方法确实是要比我说的那种效率高.
>>直到最后发完,或出错误,或TIMEOUT.
当不断地发送完毕之后也应该会有一个recv之类的操作吧, 以确定是否所有的send都已经成功. 因为如果没有这一步仍然无法 ...
原帖由 思一克 于 2007-12-23 15:02 发表
应用层有协议确然。
但不应该是每个write之后确认, 而是多个(几十,几百,数千个)以后确认。
比如你有10M的一个邮件要发,DATA后发送端就不断发了,接受端收到结束标志后,发一个OK类似的话告诉发送端。 ...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |