Je sais qu'il est recommandé d'utiliser WSAAccept()
au lieu de accept()
lors de la création d'une application IOCP. Mais je ne suis pas sûr si WSASocket()
appartient aux fonctions d'E/S superposées, ou est-ce juste une autre fonction de Winsock?WSASocket() doit-il être utilisé avec IOCP?
0
A
Répondre
2
J'ai toujours pensé que vous pourriez répondre à cette question en regardant les docs MSDN pour socket()
et WSASocket()
et, en particulier que vous ne pouviez pas créer une socket qui peut être utilisé avec E/S chevauchée (et IOCPs) en utilisant comme socket()
seulement WSASocket()
vous permet de spécifier l'indicateur WSA_FLAG_OVERLAPPED
lorsque vous créez le socket. Mais c'est incorrect car socket()
crée des sockets qui ont WSA_FLAG_OVERLAPPED
ensemble.
Cependant, en général, les fonctions de sockets berkeley/POSIX sous Windows sont simplement pratiques pour les personnes souhaitant programmer sur cette API. Il y a très peu de raisons de les utiliser et les API Windows natives devraient être préférées.
En fait, la documentation de 'socket()' dit: "Le socket créé aura l'attribut chevauché par défaut". –
Le fait. Je n'ai jamais remarqué ça. Merci de me le dire! J'ai ajusté la réponse –
Donc, il n'y a pas de fonctions qui n'appartiennent qu'à Overlapped I/O, mais il y a plutôt les fonctions 'WSAxxx()' qui peuvent être utilisées pour les E/S superposées, mais peuvent aussi être utilisées pour les E/S non superposées. Et il y a les fonctions berkeley/POSIX qui ne supportent pas les E/S superposées. Est-ce que mon hypothèse est correcte? –