2010-06-04 6 views
0

J'ai un serveur de sélection. Les sockets sont en mode blocage, mais pour la fonction select() j'utilise 250 ms. temps libre.La fonction Winsock Select() donne l'exception 0xC00000FD

Fondamentalement, mon serveur n'accepte qu'un seul client et envoie des données à ce client. Cela fonctionne pendant des semaines sans problème si je viens d'envoyer des données du serveur au client.

Mais j'ai réalisé que si le client envoie des données au serveur après 3-4 heures à la ligne select(), il donne une exception de dépassement de pile (0xC00000FD). Je rouge des dizaines de fois la page MSDN de Select(), mais rien mentionné lié à cela. Je suis vraiment coincé. Toute aide serait appréciée. Par ailleurs, j'ai trouvé sur le net, par exemple;

http://tangentsoft.net/wskfaq/examples/basics/select-server.cpp

ici après avoir accepté la connexion client, il met à mode bloquante. Et il est commenté que;

Que signifie «sécurité» ci-dessus? Alors pensez-vous que c'est mon problème? Parce que dans ma mise en œuvre, les connectés sont en mode bloquant?

Merci à l'avance

Répondre

1

Une exception signifie qu'il ya un bug dans votre code. Comme vous recevez un débordement de pile, vous avez probablement une boucle récursive dans votre code qui est trop longue, ce qui réduit l'espace de pile sur chaque appel jusqu'à ce qu'il n'y ait plus d'espace de pile restant. Dans des conditions normales, select() renvoie un code d'erreur en cas d'échec. Vous devez donc décoder la mémoire de votre programme pour obtenir une exception.

+0

Salut Remy, merci pour votre réponse. Mais la chose est qu'il y a une boucle qui interroge avec appel select(). Il n'y a donc pas d'appels de fonction récursifs. Et si le client n'envoie aucune donnée, il n'y a aucun problème. Mais s'il envoie des données, après 4 à 5 heures, il provoque un débordement de buffer à la fonction select(). Si ça aide, je peux poster un pseudo code? – AFgone

+0

Ensuite, il est peu probable que vous receviez un débordement de pile. Un dépassement de tampon est quelque chose de complètement différent. Il semble que vous fassiez une mauvaise gestion de votre code dans un sens ou dans l'autre. Alors oui, s'il vous plaît montrer un code réel. –