问题标签 [overlapped-io]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 为什么称为重叠 I/O?
我能找到的只是有关如何使用重叠 I/O 的教程,但我找不到为什么会这样称呼它。
是不是因为例如我可以从套接字读取一些东西,然后在第一次读取必然返回读取的字节之前读取其他东西?
c++ - 重叠 I/O 与阻塞和非阻塞套接字的概念有何关系?
我想知道使用重叠 I/O 是否意味着我在非阻塞模式下使用套接字,或者阻塞和非阻塞套接字的概念与重叠 I/O 的概念无关。
c++ - 客户端是否也使用了重叠 I/O?
我认为 Overlapped I/O 的发明是为了在服务器端使用,主要是为了能够处理数千个客户端。所以我认为没有任何理由在客户端使用它。我的假设正确吗?
c++ - 我应该使用 AcceptEx() 还是 WSAAccept()?
我正在使用 Overlapped IO,我想使用阻塞调用来接受客户端连接,就像我使用普通的accept()
. 我不确定,但我认为这AcceptEx()
不会阻塞,而WSAAccept()
会阻塞。那么WSAAccept()
类似于accept()
?
c++ - 为什么 GetQueuedCompletionStatus() 不返回操作类型?
GetQueuedCompletionStatus()
出队完成通知,但它不返回它是什么类型的通知(例如读取通知,写入通知)。
我有责任跟踪我启动的操作,例如,当我使用 时WSARecv()
,我在结构中添加一个标志OVERLAPPED
,指示这是什么操作(在这种情况下读取),当我出列通知时,我读取了这个标志. 那么有谁知道为什么GetQueuedCompletionStatus()
不返回操作类型?
c++ - 允许的未完成重叠 I/O 请求的最大数量是多少?
在 Overlapped I/O 的上下文中,WSASend()
可以返回错误代码WSAEWOULDBLOCK
,它表示:
Overlapped sockets:有太多未完成的重叠 I/O 请求。
是否定义了未完成的重叠 I/O 请求的最大数量,还是取决于许多标准,例如可用内存、Windows 版本等。
c++ - 在谈论重叠 I/O 时,上下文信息意味着什么?
在文档中WSARecv()
,它说:
如果 lpCompletionRoutine 不为 NULL,则 hEvent 参数将被忽略,应用程序可以使用该参数将上下文信息传递给完成例程。
“上下文信息”是什么意思?我认为这意味着我通常会为每个套接字关联一个数据结构,该数据结构可以包含套接字句柄和接收缓冲区等成员。因此,当我调用时,WSARecv()
我将向它传递一个指向此数据结构实例的指针,当我收到接收操作已完成的通知时,我将获得我之前传递的指针,因此我将知道哪个套接字已启动接收操作,什么是接收缓冲区等。
我的理解正确吗?
c++ - C++串口库使用Win32同步函数?
我在理解 Klein 的 C++ 串行库中的示例时遇到了一些麻烦。在此页面的大约一半处,有一个名为“使用 Win32 同步对象”的部分,我无法理解。 http://www.codeproject.com/Articles/992/Serial-library-for-C
这是 WaitEvent 从该调用中执行的内容(没有所有检查和内容):
两个问题: 1) 为什么他同时使用串行类中的 WaitEvent 方法,然后立即使用 Windows API 中的 WaitForMultipleObjects?它们似乎都在做同样的事情:等待 COM 端口发生某些事情。2) Stop 事件如何发出信号?WaitForMultipleObjects 是否通过名称或其他方式识别它?
c++ - WSASocket() 应该与 IOCP 一起使用吗?
我知道建议在创建 IOCP 应用程序时使用WSAAccept()
,而不是。accept()
但我不确定是否WSASocket()
属于 Overlapped I/O 函数,还是只是另一个 Winsock 函数?
c# - Linux 重叠 I/O TCP 套接字服务器未正确响应 C# ASync 客户端
我正在尝试编写一个简单的功能回声套接字客户端/服务器。我已经设法让一个带有客户端的同步服务器工作,但现在我需要一个异步服务器。
如果我使用 Microsoft 的版本,它运行良好,异步服务器:
https://msdn.microsoft.com/en-us/library/fx6588te(v=vs.110).aspx
微软异步客户端:
https://msdn.microsoft.com/en-us/library/bew39x2a(v=vs.110).aspx
我现在尝试的是让Microsoft Async Client与Linux C++ Overlapped I/O Server通信:
http://www.tutorialized.com/tutorial/Linux-C-Overlapped-Server-and-Client-Socket-Example/77220
问题从这里开始。连接已建立,我可以向服务器发送消息,服务器响应回显消息(根据调试和终端输出),但 Microsoft ASync 客户端从未在其套接字上获得响应。
是否不可能将异步客户端连接到重叠的 I/O 服务器?我不确定为什么来自服务器的回复永远不会到达客户端。调试 Microsoft ASync 客户端告诉我该Receive
函数永远不会通过这行代码:
receiveDone 是一个 ManualResetEvent:
语境:
这里是接收的回调函数,完成后设置receiveDone。bytesRead
从不超过 0.:
无论如何,此代码在连接到 ASync 服务器时有效,但不是 Overlapped I/O 服务器,所以实际上我要求在Overlapped I/O 服务器代码中更改什么,以便它发回 ASync 客户端的消息能收到吗?
Hello World
如果从 ASync 客户端发送,这是服务器的输出: