为什么有人想使用write_some
什么时候它可能无法将所有数据传输给对等方?
从升压write_some
文档
write_some 操作可能不会将所有数据传输到对等方。
如果需要确保所有数据都被写入,请考虑使用 write 函数
在阻塞操作完成之前写入。
有什么相关性write_some
boost 中的方法当有write
方法?我浏览了 boost write_some 文档,我什么也猜不到。
在一种极端情况下,write
等待直到所有数据均已确认已写入远程系统。它以最慢的速度为代价,提供了成功完成的最大确定性。
在另一个极端,您可以将数据排队等待写入并立即返回。这很快,但根本不能保证数据会被实际写入。如果路由器出现故障、DNS 提供不正确的地址等,您可能会尝试向某些不可用且(可能)很长时间不可用的计算机发送数据。
write_some
是这两个极端之间的中间点。至少直到some数据已被写入,因此它可以向您保证您尝试写入的远程主机当前确实存在(对于某些“当前”的定义可能相当宽松)。它不能向您保证所有数据都会被写入,但可能会更快地完成,并且仍然给人一种“温暖模糊”的感觉,即写入是likely去完成。
至于您何时可能想要使用它:明显的情况是通过家庭计算机上的本地连接进行大量传输。这里可能的问题不在于硬件,而在于计算机(或路由器)配置错误。一旦一个字节通过,您就可以确信连接已正确配置,并且传输可能会完成。由于转账金额较大,您可能会节省大量时间,而将成功完成的保证损失降到最低。
至于什么时候你想避免它:几乎与上述情况相反。您通过(例如)不可靠的互联网连接发送少量数据。由于您只发送少量数据,因此在发送所有数据之前返回并不能节省太多时间。连接非常不可靠,以至于传输一个数据包的几率实际上与其他数据包的几率无关——也就是说,发送一个数据包并不能告诉您能够发送下一个数据包的可能性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)