2010-08-04 6 views
1

누군가 bind() 소켓 함수가 실패 할 때 ENOENT의 errno 값이 의미하는 바를 설명 할 수 있습니까? 매뉴얼 페이지는 "파일이 존재하지 않는다"는 것을 의미합니다. 어떤 파일? 잘못된 파일 설명자를 사용하여 bind()를 호출 해 보았습니다. 예상 한대로 errno를 EBADF로 설정 했으므로 그렇게하지 않았습니다.errno == ENOENT의 bind() 오류?

+0

는, 당신은 불행하게도 – KevinDTimm

답변

0

이것은 거의 확실하게 코드의 버그입니다. 내가 추측해야만한다면, 바인드하기 위해 전달한 주소에 유닉스 소켓 경로가 잘못되었다고 말할 수 있습니다.

오류 코드가 바인드에서 나오지 않았을 가능성이 있습니다 - 스레드 안전을 확인하십시오.

+0

를 작동하지 않는 이유를 알아낼 수없는 경우 당신이 무엇을 게시, 당신에게 I를 비교, 올바른 양식에 대한 http://linux.die.net/man/2/bind 참조 실제 코드를 게시 할 수 없습니다. 대규모의 객체 지향 시스템에서 4 개의 클래스로 퍼져 있습니다. 명시 적으로 잘못된 주소를 바인딩하여 시도하고 EFAULT를 받았습니다. 잘못된 크기 (3 번째 arg)를 전달하면 EINVAL이 반환됩니다. 또한 커널 소스를 찾았고 bind() 코드가 ENOENT를 반환 할 수있는 위치를 아직 찾을 수 없습니다. –

+0

아, 그거야 - 대답 편집. 이것은 실제로 문제입니다 :-). 죄송합니다. 알아내는 데 너무 오래 걸렸습니다. – Borealid

+0

문제를 발견했으나 ENOENT의 출처를 아직 이해하지 못했습니다. 긴 이야기지만 bind() 호출에 잘못된 IP 주소를 사용했다.이 IP 주소는 errno를 EADDRNOTAVAIL로 설정해야한다. 그래서 ENOENT는 야생 거위 추격전에서 저를 보냈습니다. 함께 생각해 줘서 고마워. :) –