2010-05-19 3 views
1

Eh bien ... c'est à peu près cela, je semble obtenir une erreur "Illegal Seek" lors de la vérification de ma variable errno. Le problème est que je n'ai aucune idée de ce que cela peut signifier.Obtenir l'erreur "Illegal Seek" après avoir appelé accept()

Je sais que les sockets sont traités comme des fichiers sous unix, mais je ne vois pas comment cela peut être lié aux sockets. Ce que je fais est exactement:

int sck = ::accept(m_socket, (struct sockaddr*)&client_address, (socklen_t*)&address_len); 

Puis-je obtenir SCK = -1 et errno = ESPIPE

Et la chose étrange est que cela arrive au hasard. Je veux dire, parfois le code fonctionne bien, et parfois il y a une exception. Je travaille avec des threads, c'est compréhensible. Mais je voudrais juste savoir quel genre de comportement fait l'appel de accept() pour définir errno comme ESPIPE afin que je puisse vérifier les paramethers par exemple.

Merci Nelson R. Pérez

+1

Avez-vous essayé d'exécuter 'strace' sur votre exécutable? Vous pourriez voir plus définitivement comment «accepter» échoue. La page 'man' n'inclut rien sur' ESPIPE'. –

Répondre

1

La cause la plus probable est que la variable m_socket est corrompu. Utilisez strace comme @Aidan suggère de voir quelle valeur est transmise à accept(2), ou d'attacher un débogueur au processus et de définir un point de contrôle sur cet emplacement de mémoire.

+0

Pas nécessairement la variable - il se peut que le descripteur de fichier ait été fermé et qu'un autre fichier ait été ouvert et attribué le même numéro (car ils sont toujours affectés séquentiellement). –

+0

Hmm, oui, possible. Cela pourrait être considéré comme de la corruption bien que :) et un point de contrôle montrerait où il est changé. –

Questions connexes