标签:winsock c tcp networking byte
为什么Winsock中的send()不能保证传递您请求的所有字节?
这是TCP,它正在阻止套接字.
同样,在非阻塞时也会发生这种情况.您如何保证发送所有内容?
我注意到recv()也是一样.
解决方法:
如果未发送全部内容,则只需致电其余部分再发送即可.如果阻塞,您可以立即执行.如果未阻塞,则可以等待或使用套接字发现方法(例如select或I / O完成端口). recv也是如此.如果您没有得到想要的一切,请再次致电recv.这是recv和send返回发送或接收的字节数的原因之一.
您传递以发送或接收的字节数只是一个限制.它可以发送少于此值的(尽管,除非非阻塞,否则通常不会发送).但是它肯定能收到的收益少于那一点. (操作系统无法控制它接收多少数据或何时接收.)
TCP已为您实现.但是,如果您具有涉及应用程序级消息的应用程序协议,则该应用程序必须实现它们.魔术不会发生. TCP不会将字节“粘合在一起”给您. TCP是字节流协议,而不是消息协议.如果需要消息,则必须实现它们.
标签:winsock,c,tcp,networking,byte 来源: https://codeday.me/bug/20191011/1894461.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。