我正在尝试编写使用套接字通过网络发送数据的程序。现在我需要来自控制台的输入命令。我有套接字选择功能。在linux中,您可以使用select在套接字和conolse中查找数据输入。我如何在visual c ++上获得相同的功能?
当我在select函数中插入控制台描述符时,它返回错误10038(非插槽上的套接字操作。)
答案 0 :(得分:1)
Windows不支持将select
用于任意句柄。在Linux和其他形式的Unix中,"所有句柄都是相同的",无论它们是控制台,套接字还是其他任何句柄,它都不重要。
请注意,Windows中的select
不会使用HANDLE
,而是采用特殊的SOCKET
类型的句柄。查看Windows的定义' fd_set
最简单的解决方案可能是使用第二个线程来读取控制台输入。当然无法将控制台包含在select
电话中。可能有一些方法可以说服Windows SOCKET
是一个可等待的对象,并将它用于WaitForMultipleObjects
之类的东西,以及一个控制台输入句柄 - 但我并不相信(而且我没有Windows设置可以试用它。
答案 1 :(得分:0)
您可以使用控制台ReadFile
尝试HANDLE
。因此,您可以将控制台作为文件读取。您还可以使用ReadFile
和WrtieFile
读取/写入套接字
请参阅Console Handles,ReadFile和WriteFile
不确定这是你想要的。如果您想在Windows上使用某种select
,可以查看IO Completion Ports(不确定它们是否与控制台配合使用 - 请查看文档)