2011-05-16 2 views
1

소켓 클라이언트 프로그램이 서버와의 연결을 설정하면 은 몇 바이트를 쓰고 (블로킹) read()을 사용하여 응답을 기다립니다.소켓 : read()가 EINVAL을 리턴하게하는 원인은 무엇입니까?

그러나이 오류는 EINVAL ("잘못된 인수") 오류와 함께 실패합니다. 이전 호출은 create(), bind()connect() 소켓을 성공적으로 완료했습니다.

내 질문 여기에 잘못된 무엇

  • ?

플랫폼은 Linux x64입니다.

+3

코드를 게시하십시오. –

+1

... 현재 어떤 플랫폼을 사용하고 있는지 알려주십시오. – Mat

+0

실제로 코드를 게시해야합니다. 'EINVAL '은 일반적으로 부주의 한 실수 (아마 잘못된 인수처럼 간단 함)를 나타내며 코드를 보지 않고는 진단 할 수 없습니다. –

답변

1

참조하십시오. 이것은 지원되지 않는 것 같습니다.
(왜? 최소 크기는 무엇입니까? 2의 배수/플랫폼의 비트 수 여야합니까?).

이제 8을 통과하고 작동합니다. 의견을 보내 주셔서 감사합니다.

+1

"플랫폼의 비트"같은 것은 없습니다. 어딘가에 버그가 있었을 가능성이 높습니다. 우리에게 코드를 제공해야합니다. – nos

+0

이전에 작동하지 않는 이유가 아니기 때문에 대답으로 받아 들여서는 안됩니다. –

2

fd는 에 적합하지 않습니다. 또는 파일 이 O_DIRECT 플래그로 열렸고 buf에 지정된 주소 인 이 count에 지정된 값이거나 현재 파일 오프셋이 적절하게 정렬되지 않았습니다.

이 문제는 내가 read() 기능에 1 바이트의 크기를 통과이었다 http://www.kernel.org/doc/man-pages/online/pages/man2/read.2.html

+1

'die.net' man 페이지로의 링크를 피하십시오. 그들은 구식이지만 Google 검색 결과의 최상위에있는 사람들의 피드백 효과로 인해 검색 결과를 질문에 대한 답변으로 연결합니다. 최신 및 인증 사본은'kernel.org'에 있습니다. –

관련 문제