当我的客户端向服务器发送文件时,我应该在发送下一个块之前休眠(100)左右以确保服务器有足够的时间下载+写入数据吗?
这似乎完全没有必要吗?
另外,我在发送块时遇到了会阻塞错误(#10035),所以我只是循环发送直到它成功,如果发送 == SOCKET_ERROR goto SendAgain; , 那样行吗?
当我的客户端向服务器发送文件时,我应该在发送下一个块之前休眠(100)左右以确保服务器有足够的时间下载+写入数据吗?
这似乎完全没有必要吗?
另外,我在发送块时遇到了会阻塞错误(#10035),所以我只是循环发送直到它成功,如果发送 == SOCKET_ERROR goto SendAgain; , 那样行吗?
在我看来,使用 sleepfunction 等待某事完成在 99% 的情况下都是错误的。您现在永远不会有您需要或您期望执行一个进程的时间(可能会被例如尖峰、i/o 中的其他问题或其他问题中断)
如果您想确保完全执行重要的事情,您应该阅读信号量或类似的东西,您可以在开始/结束时锁定/释放进程。
如果您通过 TCP 发送文件,那么它是确保已收到所有内容的协议,我不会在每个块之间放置睡眠。
willblock 错误是您为输出缓冲区发送了太多数据,或者您尝试发送太快,并且远程缓冲区已满。再次发送它似乎没问题,因为接收者收到了它,但没有足够的空间来存储它并且只是丢弃它。
这是一篇关于您的错误的小文章:Winsock 错误 10035