2016-06-20 2 views
-1

난 그냥 리눅스에서 API를 연결에서 오류가있어. 리눅스에서 소켓 연결

나는 연결에 성공하면 '연결', 내가 반환 값 "3"

가 오류 코드입니다있어 0을 반환합니다 알고? 아니면 모르는 뭔가가 있습니까?

connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); 

나는 양말에서 3을 받았다.

+0

코드하십시오를 참조하십시오. 'connect()'는 0 또는 -1 만 반환합니다. – EJP

+0

죄송합니다. 내 코드를 잊어 버렸습니다. – user3773632

+0

이 코드는 반환 코드를 저장하지 않습니다. 3이라는 걸 어떻게 알았지? 그리고 '양말'은 무엇을 의미합니까? – EJP

답변

5

connect()의 반환 값을 얻으려면 할당의 왼쪽으로 사용되는 변수를 사용하는 것이 가장 간단합니다.

int result = connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); 
printf("connect returned: %d\n", result); 

sock

소켓이어야하며, socket()에 대한 호출의 결과로 파일 기술자 번호가 할당되었다. 새 파일 설명자를 리턴하는 대부분의 UNIX API는 사용 가능한 최저 디스크립터를 리턴합니다. 프로그램은 일반적으로 설명자 0, 12 (STDIN, STDOUT 및 STDERR의 경우)로 시작합니다. 따라서 socket()3을 반환한다는 것은 예상치 못한 일이 아닙니다.

(일반적 및 POSIX) 리눅스 시스템에서
0

, 당신은 실패 이유를 알고 perror 기능을 사용할 수 있습니다 :

if (0 != connect(...)) 
{ 
    perror("connect"); 
} 

man perror