【发布时间】:2014-05-24 19:06:55
【问题描述】:
在 ConnectEx() API 的 MSDN 页面中,没有关于 SetFileCompletionNotificationModes() 以及设置标志 FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 是否也适用于 ConnectEx()。
SetFileCompletionNotificationModes() 的 MSDN 页面明确指出,如果设置了标志 FILE_SKIP_COMPLETION_PORT_ON_SUCCESS,那么所有(所有?)应该返回 ERROR_IO_PENDING 的 API 都可以立即返回,而无需在 IOCP 循环中排队 OVERLAPPED。
所以,我的问题是:这真的适用于所有接受 OVERLAPPED 并返回 ERROR_IO_PENDING 的 API 吗?
我将我的套接字设置为FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 在通过调用ConnectEx()连接套接字之前。
我是否应该期望ConnectEx() 立即返回(也就是说,它不返回 ERROR_IO_PENDING 并且 I/O 完成将被 IOCP 循环完全跳过,例如,当连接到 localhost 时)?
即使我只是设置FILE_SKIP_COMPLETION_PORT_ON_SUCCESS after ConnectEx() 成功完成,(例如,我在ConnectEx() 的 IOCP 完成例程中设置它),如果我断开连接并重用该套接字通过再次调用ConnectEx() 建立新连接,就像我设置了那个标志之前 ConnectEx(),所以出现了同样的问题。
【问题讨论】:
标签: sockets winapi tcp io iocp