【发布时间】:2016-12-28 11:26:06
【问题描述】:
所以我一直在做一些 WIN32 套接字编程,我试图了解为什么首选重叠 IO。特别是,我想知道为什么会这样
if (WSARecv(
socket,
dataBuf,
1,
NULL,
&flags,
&ov,
NULL)
== SOCKET_ERROR) {
if (WSAGetLastError() == WSA_IO_PENDING)
{
if (WSAWaitForMultipleEvents(1, &ov.hEvent, FALSE, INFINITE, FALSE) == WAIT_TIMEOUT)
{
return FALSE;
}
} else {
return FALSE;
}
}
// ... more code here
return TRUE;
优于像这样的普通 IO 调用
recv(socket, dataBuf, bufLen), 0);
据我了解,如果 IO 事件未在 WSAWaitForMultipleEvents 完成,第一次调用将阻塞,而第二次调用直接在 recv 上阻塞,直到数据到达。那么稍晚一点 IO 调用块的实际好处是什么?是不是如果在等待你做之前你有可以做的事情吗?
如果是这种情况,在数据到达之前您无法执行任何操作的应用程序中是否值得/需要重叠 IO?
【问题讨论】:
标签: c++ sockets winapi asynchronous overlapped-io