J'ai créé un simple programme client fictif/client fictif en utilisant IOCP à des fins de test/profilage. (Et je voulais aussi noter que je suis nouveau à la programmation réseau asynchrone)ConnectEx avec un problème IOCP
Il semble que le serveur fonctionne bien avec le client d'origine, mais lorsque le client factice tente de se connecter au serveur avec la fonction ConnectEx, thread IOCP Worker est toujours bloqué par la fonction GetQueuedCompletionStatus et ne renvoie jamais de résultat tant que le serveur réussit à accepter la connexion.
Quel est le problème et/ou la raison, et comment dois-je faire pour résoudre ce problème?
S'il vous plaît montrer plus de code. Quoi qu'il en soit, que fait-il lorsque vous essayez de telnet votre serveur? (telnet localhost, très utile en tant que client tcp simple). –
Je suis désolé que je ne peux pas vous montrer le code réel parce qu'il est basé sur la bibliothèque de notre société, mais le squelette du client peut être décrit comme ci-dessous: WSAStartup -> Créer IOCP -> Lancer la discussion Worker -> Get ConnectEx avec IOCtl -> Bind prise -> Appeler ConnectEx -> Allouer le socket à IOCP. Et je reçois "Socket est déjà connecté." erreur avec WSAGetLastError lorsque j'essaie de me connecter au serveur à plusieurs reprises. Je vais essayer de telnet mon serveur demain. Je vous remercie! – summerlight
Il semble que cela fonctionne correctement lorsque ConnectEx est appelé sur un nouveau thread à des fins de connexion seulement, mais je ne sais toujours pas quelle est la raison exacte de ce problème. – summerlight