10得票4回答
从I/O完成端口中删除句柄以及有关IOCP的其他问题

CreateIoCompletionPort函数可以创建一个新的I/O完成端口,并将文件句柄注册到现有的I/O完成端口中。 然后,我可以使用任何函数,例如在套接字上使用recv或在带有OVERLAPPED结构的文件上使用ReadFile来启动异步操作。 我必须检查函数调用是否同步返回,即使...

9得票1回答
从IOCP线程调用WSAGetLastError()返回不正确的结果。

我调用了WSARecv(),它返回了WSA_IO_PENDING。然后我从另一端发送了一个RST数据包。存在于另一个线程中的GetQueuedCompletionStatus()函数如预期地返回了FALSE,但是当我调用WSAGetLastError()时,返回的错误码是64而不是WSAECO...

8得票1回答
CreateFile()返回INVALID_HANDLE_VALUE但GetLastError()返回ERROR_SUCCESS

我正在使用CreateFile()打开一个串口。我有一个测试用例(过于复杂,无法重新分发),该测试用例始终导致CreateFile()返回INVALID_HANDLE_VALUE和GetLastError()返回ERROR_SUCCESS。看起来,只有当一个线程在另一个端口关闭它的同时打开端口...

8得票1回答
Windows 2012 R2关闭listening socket时,closesocket()会挂起

我在一台生产服务器上遇到了一个奇怪的情况。 我们有一个用C++编写的网络应用程序,通过使用IOCP响应用户的TCP请求。 两天前,我们对Windows 2012 R2进行了更新(安装了最新的安全更新。上次更新是6个月前)。更新后,在尝试停止服务时,我们在日志中看到服务器在调用关闭监听套接字...

8得票8回答
Delphi是否有基于I/O完成端口的组件?

我知道Indy, ICS, Synapse和Clever InetSuite,但它们都不支持IOCP。还有其他的吗? 编辑: 我找到了iocpclasses,它是用Delphi5编写的。总比没有好。

7得票3回答
TCP/IP IOCP接收数据有时会损坏 - 在Windows上使用Visual C++

我正在编写一个简单的测试 ICOP 客户端和服务端,以确保我正确地使用 API,并且客户端发送的数据被服务器正确接收。我已经包含了这个问题的所有代码。 在这里,我遇到了一些问题,就是接收缓冲区内的数据有时似乎会损坏(损坏指缓冲区内的数据块有时可能是无序或缺失的)。明确一点,这是在单个接收缓冲...

7得票3回答
臭名昭著的“ERROR_NETNAME_DELETED”错误可以被视为错误吗?

我正在使用完成端口编写Windows NT中的tcp服务器,以利用异步I/O。我有一个TcpSocket类、一个TcpServer类和一些虚拟函数回调,在I/O操作完成时调用,例如当读取完成时调用onRead()。我还有一个onOpen()用于在连接建立时调用,一个onEof()用于在连接关闭...

7得票3回答
CloseHandle()函数在串口实际关闭之前就返回了

我正在努力思考串口关闭完成的时间,以便重新打开它。结果发现,在端口未解锁之前,CloseHandle()就已经返回了。 我使用CreateFile(FILE_FLAG_OVERLAPPED)打开串行端口,并使用CreateIoCompletionPort()将其与完成端口相关联,使用Read...

7得票6回答
如何并行地ping多个网络设备是最佳方法?

我通过迭代ping来轮询网络中的许多设备(超过300个)。 程序按顺序轮询设备,因此速度较慢。 我想提高轮询的速度。 在Delphi 7中有一些方法可以实现: 每个设备都有一个执行ping的线程。手动管理线程。 学习并使用Indy 10。需要示例。 基于窗口消息使用重叠I/O。 基于事...