我应该在循环中从WinAPI(https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms740149(v=vs.85).aspx)调用send
函数来保证所有数据都已发送(如Python标准库中的类似send
函数)或者它的工作方式与sendall
函数一样吗?
答案 0 :(得分:1)
Python和Winsock API都实现了BSD套接字api,因此send
函数的工作方式非常相似。所以不,它不是一个方便的sendall
和远远的FAR太多的代码假设它。
您可以通过循环发送直到所有字节都已成功发送,在Windows上编写一个简单的sendall
函数,但这在GUI应用程序中是一个坏主意,因为它会阻止应用程序响应用户,在更复杂的控制台应用程序中,它可能会阻止其他套接字通信。
如果其中任何一个都是一个问题,你应该调查WSAAsyncSelect
的GUI应用程序,你的窗口proc将在每次准备好读取或写入套接字时接收窗口消息,或者select
它允许控制台程序/非gui工作线程在最多32个套接字(窗口限制)的集合上循环,以测试哪些是可读或可写的。