首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理套接字的WSA_IO_PENDING:

处理套接字的WSA_IO_PENDING:
EN

Stack Overflow用户
提问于 2018-08-09 09:25:47
回答 2查看 684关注 0票数 0

result = ::send(s, buf, length, flag)

最终会发送多少数据?当我得到result == SOCKET_ERRORWSAGetLastError () == WSA_IO_PENDING时,最终会发送length字节的buf吗?

还是我需要重新发送相同的buf数据?

另一方面,

WSA_IO_PENDING 重叠操作将于稍后完成。 应用程序已启动重叠操作,无法立即完成。当手术完成后,我们会在稍后作出完成指示。

在我看来,发送操作将在稍后完成.

更新:进一步的问题被问到这里,因阻塞(重叠I/O) Winsock2调用而挂起

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-09 09:31:52

在您链接的文档页面中:

如果没有发生错误,send将返回发送的字节总数,该字节数可以小于len参数中请求发送的字节数。否则,返回SOCKET_ERROR的值。

也就是说,如果是result == SOCKET_ERROR,那么什么也不发送。

至于WSA_IO_PENDING,如果您使用异步文件(例如WSASend ),则可能会发生这种情况。在这种情况下,实际发送的字节数量需要稍后检索,可能需要使用io完成例程。

票数 1
EN

Stack Overflow用户

发布于 2018-09-18 13:34:57

经过一些研究和实验..。以下是一些事实。

*插座将启用隐式重叠属性。

套接字可以通过*WSASocket或通过塞索克托特 / OPENTYPE创建w/o重叠属性*WSASocket,但是超时特性(例如SO_RCVTIMEO)需要重叠属性。

当使用*发送 *反腐败局时,WSA_IO_PENDING错误是可能的,应该使用WSAGetOverlappedResult来处理(我从Windows10开始就观察到了这种行为)。

或者,使用::WSARecv或::WSASend。

还有一些未解决的问题:

更新:进一步的问题被问到这里,因阻塞(重叠I/O) Winsock2调用而挂起

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51763378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档