同时从管道和插座读取

时间:2017-05-29 16:20:09

标签: c windows sockets winapi asynchronous

我需要将一些POSIX代码翻译成Windows,但是在异步IO方面我遇到了麻烦。在POSIX上,我们使用select来确定数据是在多个管道之一还是在套接字上可用。

我们正在为这样的子进程的管道设置HANDLE

ZeroMemory(&startInfo, sizeof(STARTUPINFO));
startInfo.cb = sizeof(STARTUPINFO);
startInfo.hStdInput = hInRead;
startInfo.hStdOutput = hOutWrite;
startInfo.hStdError = hErrWrite;
startInfo.dwFlags |= STARTF_USESTDHANDLES;

我们可以使用HANDLE s hOutReadhErrRead从stdout和stderr中读取。但是,我们需要弄清楚哪些流可用数据。

此外,还有一个套接字,我们也需要从该套接字读取数据。我们像往常一样创建套接字(跳过错误处理):

s = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);
connect(s, ptr->ai_addr, (int)ptr->ai_addrlen);

并使用recv接收数据,但同步。

我们如何同时读取所有三个流的数据?目前,我们使用CreateThread每个流有一个线程,但我们认为这是非常低效的。在Windows上有原生方式吗?

0 个答案:

没有答案