gpt4 book ai didi

c - Winsock2 在 fd 0 (stdin) 上的 select() 失败

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:08 25 4
gpt4 key购买 nike

使用 Winsock2,下面的代码序列为 select() 返回 -1(失败)。

#include <Winsock2.h>
#include <stdio.h>

...

int rc;
int fdstdin = fileno(stdin); /* returns 0 as expected */
fd_set fds;

FD_ZERO(&fds);
FD_SET(fdstdin, &fds);

rc = select(1, &fds, NULL, NULL, NULL);

...

这是使用 Winsock2 时的预期行为还是我遗漏了什么?

最佳答案

这是预期的行为。如上所述the documentation , winsock 的select 函数只作用于套接字,stdin 不是套接字。

如果您调用了WSAGetLastError,您无疑会发现原因是

WSAENOTSOCK One of the descriptor sets contains an entry that is not a socket.

试试 WSAEventSelectWaitForMultipleObjectsEx;后者还可以等待普通文件句柄以及来自普通文件句柄上未完成读取操作的 OVERLAPPED 事件对象。

关于c - Winsock2 在 fd 0 (stdin) 上的 select() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com