select 使用 io 多路复用 oserror: [winerror 10038]
在 windows 系统上使用 select 库进行 io 多路复用时,可能会遇到如下错误:
OSError: [WinError 10038] 在一个非套接字上尝试了一个操作
这是因为在 windows 系统中,select 库只能用于套接字,不能用于文件对象。select 函数的第二个参数用于监听文件描述符(即文件句柄),而文件描述符通常由套接字创建。
在 linux 系统中,select 可以同时监听套接字和文件描述符。但由于 windows 系统中 select 底层实现由 winsock 库提供,而 winsock 仅处理来自 winsock 的文件描述符,因此无法处理来自其他来源(例如文件)的文件描述符。
因此,在 windows 系统上使用 select 时,只能监听套接字,而无法监听文件对象。如果需要监听文件对象,可以使用 windows 提供的其他 api,例如 waitformultipleobjects()。
以上就是Windows 系统下为什么 select 库不能用于文件对象?的详细内容,更多请关注php中文网其它相关文章!