我应该在循环中从WinAPI调用send函数吗?

时间:2015-10-28 14:55:33

标签: python windows python-2.7 winapi network-programming

我应该在循环中从WinAPI(https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms740149(v=vs.85).aspx)调用send函数来保证所有数据都已发送(如Python标准库中的类似send函数)或者它的工作方式与sendall函数一样吗?

1 个答案:

答案 0 :(得分:1)

Python和Winsock API都实现了BSD套接字api,因此send函数的工作方式非常相似。所以不,它不是一个方便的sendall和远远的FAR太多的代码假设它。

您可以通过循环发送直到所有字节都已成功发送,在Windows上编写一个简单的sendall函数,但这在GUI应用程序中是一个坏主意,因为它会阻止应用程序响应用户,在更复杂的控制台应用程序中,它可能会阻止其他套接字通信。

如果其中任何一个都是一个问题,你应该调查WSAAsyncSelect的GUI应用程序,你的窗口proc将在每次准备好读取或写入套接字时接收窗口消息,或者select它允许控制台程序/非gui工作线程在最多32个套接字(窗口限制)的集合上循环,以测试哪些是可读或可写的。