2010-08-04 176 views
1

任何人都可以幫助解釋當bind()的socket函數失敗什麼ENOENT的錯誤值意味着什麼?手冊頁說這意味着「該文件不存在」。什麼文件?我試着用一個壞的文件描述符調用bind(),並按照預期將errno設置爲EBADF,所以不是這樣。與errno == ENOENT綁定()錯誤?

+0

看到http://linux.die.net/man/2/bind正確的形式,把它比作你的,後你有什麼,如果你不能弄清楚爲什麼你不工作 – KevinDTimm 2010-08-04 18:16:00

回答

0

這幾乎可以肯定是在你的代碼中的錯誤。如果我不得不猜測,我該怎麼做,我會說你在傳遞的地址中綁定了一個錯誤的UNIX套接字路徑。

也有可能出錯的代碼不是從綁定來 - 檢查你的線程安全。

+0

不幸的是,我不能發佈實際的代碼。它分佈在一個面向對象的大型系統中的4個課程中。我試着傳遞一個明確的錯誤地址來綁定並獲得EFAULT。傳遞一個錯誤的大小(第三個參數)給EINVAL。我還找到了內核源代碼,並且無法找到任何bind()代碼可能返回ENOENT的地方。 – 2010-08-05 12:40:06

+0

啊,明白了 - 回答編輯。這其實是個問題:-)。抱歉,花了這麼長時間才弄明白。 – Borealid 2010-08-05 14:57:01

+0

發現問題,但仍不明白ENOENT來自哪裏。說來話長,但我們使用了錯誤的IP地址進入該bind()的調用,它應該設置errno EADDRNOTAVAIL。所以ENOENT就把我送走了。謝謝你一直在鼓勵我的想法。 :) – 2010-08-05 16:11:44