Winsock2's select() on fd 0 (stdin) fails

99封情书 提交于 2019-11-28 12:27:31

问题


Using Winsock2 the code sequence below returns -1 (failure) for select().

#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);

...

Is this the expected behaviour when using Winsock2 or am I missing something?


回答1:


This is expected behavior. As mentioned all over the documentation, winsock's select function only works on sockets, and stdin is not a socket.

If you had called WSAGetLastError, you undoubtedly would have found that the cause was

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

Try WSAEventSelect and WaitForMultipleObjectsEx; the latter can also wait on normal file handles as well as OVERLAPPED event objects from outstanding read operations on normal file handles.



来源:https://stackoverflow.com/questions/8773838/winsock2s-select-on-fd-0-stdin-fails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!