WSASocket() 应该与 IOCP 一起使用吗?

Should WSASocket() be used with IOCP?

我知道在创建 IOCP 应用程序时建议使用 WSAAccept() 而不是 accept()。但是我不确定 WSASocket() 是否属于 Overlapped I/O 函数,或者它只是另一个 Winsock 函数?

我一直认为您可以通过查看 socket() and WSASocket() 的 MSDN 文档来回答这个问题,特别是您无法创建可与重叠 I/O 一起使用的套接字(并且IOCPs) 使用 socket() as only WSASocket() 允许您在创建套接字时指定 WSA_FLAG_OVERLAPPED 标志。但这是不正确的,因为 socket() 创建的套接字设置了 WSA_FLAG_OVERLAPPED

但是,一般来说,Windows 中的 berkeley/POSIX 套接字函数只是为了方便那些想要使用 API 编程的人。几乎没有理由使用它们,应该首选原生 Windows APIs。