我已经通读了 MSDN 上的 Winsock2 文档,但如果有人能提供帮助,我仍然需要澄清一些事情。
我计划做一些类似于您在使用 WSAAsyncSelect() 时获得的设置,但使用一个单独的线程。我可以使用 WSAEventSelect() 将多个套接字链接到单个事件对象吗?
如果我改为使用完成端口,我可以通过完成端口获取哪些事件? MSDN 有一个文件操作列表,但我无法将它们与将通过完成端口发送的事件(FD_READ、FD_WRITE 等)联系起来。有没有办法告诉哪个事件正在完成?还是我每次发送或接收内容时都必须注意这一点并将其存储在结构中?
感谢任何*帮助任何人都可以给我这个 =D
编辑:更好的是,我是否最好切换到 C# 来执行此操作?它似乎很受欢迎,更适合这项特定任务。
最佳答案
不,您不能将多个套接字链接到单个 WSAEVENT。您必须为每个要接收通知的套接字调用 WSACreateEvent() 和 WSAEventSelect()。不过,您可以使用 WSAWaitForMultipleEvents() 让单个线程等待来自多个套接字的事件。
关于使用完成端口,我建议你阅读MSDN关于此事的文章,例如:
Windows Sockets 2.0: Write Scalable Winsock Apps Using Completion Ports .
关于C++ Winsock 2 题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3373303/