2010-08-04 8 views
1

Quelqu'un peut-il aider à expliquer ce que signifie une valeur errno de ENOENT lorsque la fonction de socket bind() échoue? La page de manuel indique que cela signifie que "le fichier n'existe pas". Quel fichier? J'ai essayé d'appeler bind() avec un mauvais descripteur de fichier et cela donne errno à EBADF comme prévu, donc ce n'est pas ça.erreur bind() avec errno == ENOENT?

+0

voir http://linux.die.net/man/2/bind pour la forme correcte, comparez-la à la vôtre, postez ce que vous avez si vous ne pouvez pas comprendre pourquoi le vôtre ne fonctionne pas – KevinDTimm

Répondre

0

Ceci est presque certainement un bug dans votre code. Si je devais deviner, ce que je fais, je dirais que vous avez un mauvais chemin de socket UNIX dans l'adresse que vous passez à lier.

Il est également possible que le code d'erreur ne provienne pas de bind - vérifiez la sécurité de votre thread.

+0

Malheureusement, je Impossible de publier le code réel. Il est réparti sur 4 classes dans un grand système orienté objet. J'ai essayé de passer une adresse explicitement mauvaise à lier et j'ai eu EFAULT. Passer une mauvaise taille (3ème arg) donne EINVAL. J'ai également localisé la source du noyau et ne peux pas encore trouver où n'importe quel code de bind() pourrait renvoyer ENOENT. –

+0

Ah, j'ai compris - réponse éditée. Celui-ci est en fait le problème :-). Désolé, il a fallu si longtemps pour le comprendre. – Borealid

+0

Trouvé le problème, mais ne comprends toujours pas d'où vient l'ENOENT. Longue histoire, mais nous utilisions la mauvaise adresse IP dans l'appel bind(), qui aurait dû donner errno à EADDRNOTAVAIL. L'ENOENT m'a donc envoyé faire une chasse aux oies sauvages. Merci d'avoir poussé ma réflexion. :) –

Questions connexes