소켓 함수에서 recv 에러 메세지의 차이를 알구 싶습니다.

black0328의 이미지

#define MAX_PACKET_SIZE 1024

int recvByte;
char message[ MAX_PACKET_SIZE];

if ( ( recvByte = recv ( client_accept, message, MAX_PACKET_SIZE, MSG_WAITALL ) ) != MAX_PACKET_SIZE )
{
            perror("recv");                             
 }

코드의 recv 일부분입니다.
에러가 발생을 하는데 에러 메세지가 세가지 경우가 다음과 같습니다.

하나 , recvByte = 0 이고 메세지는 Resource temporarily unavailable
둘째, recvByte = -1 이고 메세지는 Resource temporarily unavailable
셋째, recvByte = -1 이고 메세지는 Connection reset by peer

이 세가지 메세지가 어떤 경우 발생하는지 의미가 무엇인지 좀 알려주세요.
그리고 정확히 recvByte 가 0 인경우는 어떤 경우인가요?

liongo의 이미지

man recv

Quote:

반환값
이들 호출은 받은 바이트들의 수를 반환한다. 에러가 발생하면
-1을 반환한다.
에러
이것들은 소켓 층에서 발생하는 몇몇 표준 에러이다. 추가적인
에러들은 프로토콜모듈들 아래에서 발생되고 반환된다; 해 당
메뉴얼 페이지들을 참조해라.

EBADF 인자 s 가 유효한 기술자가 아니다.

ENOTCONN
소켓은 연결 지향형 프로토콜이지만 연결되지 않았다.(
connect(2)와 accept(2)를참조해라).

ENOTSOCK
인자 s 가 소켓을 가리키지 않는다.

EAGAIN 소켓이 non-blocking이고 받는 작동은 블럭킹되어 있거
나 받는 타임아웃이 설정되어있고 데이터를 받기 전에
타임아웃이 끝났다.

EINTR 받기가 데이터를 이용하기 전에 전달된 신호에 의해 인
터럽트 되었다.

EFAULT 받는 버퍼 pointer(s)가 프로세스 주소 공간이외를 가
리키고 있다.

EINVAL 무효한 인자가 전달되었다.

' 형식이 내용을 규정한다. '

black0328의 이미지

recvByte = 0 일 경우로 에러로 처리해야하는 건지요?
에러로 처리하지 않는다면 다시 recv() 를 해서 0 이상의 값이 리턴 될 때까지 받아야 하는건지요?

jinyeong의 이미지

recv의 return value 0은 EOF 입니다.

error 가 아닙니다.

I thought what I'd do was,
I'd pretend I was one of those deaf-mutes.. or should I?

liongo의 이미지

헉 sanji님... 그 케릭터 아이콘은 ㅡㅡa

어느 애니에서 괴물같은 해커의 아이콘이었던거같은데..

그 이미지를 쓰시다니 재밌군요 :)

그애니 제목좀 저에게 다시 알려주시면 감사하겠습니다..

머리가나빠서 잘까먹는 ㅡㅡ....

p.s 게시판 내용과 관련없는 내용을 올려서 죄송합니다..

' 형식이 내용을 규정한다. '

jinyeong의 이미지

공각기동대 TV판(Ghost In the Shell - Stand Alone Complex) 입니다.

1기에 나오죠. _웃는남자_

참고로 제 signature도 웃는 남자와 관련된 것입니다..

icon에 둥근 테두리에 써 있는 바로 그..

Quote:
p.s 게시판 내용과 관련없는 내용을 올려서 죄송합니다..

저두요.

I thought what I'd do was,
I'd pretend I was one of those deaf-mutes.. or should I?

bluelight의 이미지

리턴값이 0일경우 보통 peer가 close될경우
-1일경우 local socket이 close될경우 입니다.

정확한 원인을 보려면..
errno나 socketopt에서 SOL_ERROR 을 이용하면 되겠네요..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.