2010-01-04 4 views
1

나는 리눅스 머신에서 C/C++ (혼합) 전용 게임 서버를 개발 중이다. 내가 다음 코드 조각이 여기홀수 소켓() 오류 - -1을 반환하지만, errno = ERROR_SUCCESS

int sockfd=socket(AI_INET, SOCK_DGRAM, 0); 
if(sockfd==-1) 
{ 
    int err=errno; 
    fprintf(stderr,"%s",strerror(err)); 
    exit(1); 
} 

내 문제, 즉 소켓 반환 -1 (실패를 의미)입니다 및 오류 문자열이 인쇄되고 있지만, "성공"(ERROR_SUCCESS)입니다.

기타 사항 :

  • 나는 (문맥,하지만 난 말할 줄 알았는데) 포트> 1024에 소켓을 요청하는 내가 슈퍼 사용자로 응용 프로그램을 실행하고있어
  • 하고
+0

당신의 코드를 잘라내거나 붙여 넣기나요? 이 다시 유형의 경우 귀하의 코드 == (비교) if 및 않습니다 = (할당) 있음을 확인할 것입니다. –

+0

그것은 '=='모든 권리가 있습니다 ... – aviraldg

+0

errno의 값은 무엇입니까? –

답변

11

나는 매우 어리 석다. 조심스럽게 내 dev - 컴퓨터 쇼에서 내 코드를보고 :

if(sockfd==-1); 
... 
+5

당신이 이것을하는 첫번째 사람이 아니며 당신도 마지막 사람이 될 수 없습니다 :-) – moritz

+1

이것은 정확하게 ERROR_SUCCESS가 존재하는 이유입니다. :-) –

+0

aviraldg, 당신은 자신의 대답을 받아 들여서 문제가 해결 된 것처럼 보일 수도 있습니다. –

1

여러 스레드가 실행 중입니까? 그들은 errno 값을 덮어 쓸 수 있습니다.

socket()과 if() 사이에 코드 줄이 있습니까? 다른 함수 호출은 errno를 덮어 쓸 수 있습니다.

+2

'errno'는 C 표준에 의한 스레드 로컬입니다. – qrdl

+1

C 표준에는 스레드 개념이 없습니다. posix는 스레드 로컬이어야합니다. – nos

관련 문제