2015-03-09 1 views
0

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?

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.

+2

En fait, la documentation de 'socket()' dit: "Le socket créé aura l'attribut chevauché par défaut". –

+0

Le fait. Je n'ai jamais remarqué ça. Merci de me le dire! J'ai ajusté la réponse –

+0

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? –