读书人

关于IOCP有些疑问.麻烦帮忙解答下解决

发布时间: 2012-02-21 16:26:23 作者: rapoo

关于IOCP有些疑问...麻烦帮忙解答下
假设 我一次WSASend一个很大的缓冲区,那么因为网络的原因,可能会一次全发出去了,
可以一次只发了一部分.
完成端口是否在两种情况下都会接收到通知?

另外我想问下最小传输单元是多大,就是不会因为网络原因造成只发送一部分的情况

[解决办法]
具体可以看我的博客《IOCP的几点细节》。

一个WSASend调用后会产生3种后果:

1 返回TRUE
2 返回FALSE,GetLastError返回 PENDING
3 返回FALSE,GetLastError返回 非PENDING

1和2都必然会导致产生一个“完成包”,也就是说,必然可以“收到通知”,3不会产生完成包。

你问“是否发了一半也会收到通知?”,答案是肯定的。

在公网上,很容易出现“部分完成”的情况。

最小传输单元与TCP接口没任何关系,并不是说“我只发‘小于最小传输单元’的数据就肯定不会被分段”,因为,TCP会将你的数据重新组合: 比如,你很快地两次发300字节,每一次都小于MTU,但是TCP可能会传输为400和200的两个IP包,所以,你不用考虑这个问题。

读书人网 >VC/MFC

热点推荐