2011-03-15 4 views
1

비 차단 클라이언트 소켓을 구현할 수 있습니까? 내가 사용하는 시도리눅스 클라이언트 소켓 : 연결하기 전에 O_NONBLOCK을 설정할 수 없습니까?

sockfd = socket(AF_INET, SOCK_STREAM, 0); 
fcntl(sockfd, F_SETFL, O_NONBLOCK); 
connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)); 

하지만 응용 프로그램이 connect 문에 도달 할 때, 다음과 같은 오류가 존재합니다 ', 즉 아무튼

ERROR connecting: Operation now in progress

내가 완전히 비 블로킹 소켓을 만들 필요가 심지어 TCP 핸드 셰이크를 기다릴 필요가 없습니다. 표준 소켓 함수를 사용하여이 작업을 수행 할 수 있습니까? 아니면 스레딩 작업에 들어가야합니까?

답변

2

비 차단 모드 일 때 나타나는 오류는 정상입니다. 이것은 작업을 즉시 완료 할 수 없다는 것을 의미합니다. 즉, 연결하기 전에 파일 디스크립터를 기다려야 사용할 수 있습니다.

이것은 비 차단 소켓이 C로 작동하는 방식입니다.

+0

어떤 기능을 사용해야합니까? –

+0

선택 또는 폴링을 찾아야합니다. –

+1

알아 냈어 :'connect()'함수는 비 블로킹 소켓에 연결하려고 시도 할 때'EINPROGRESS' 에러를 반환하지만, 그 특별한 에러는 무시되어야한다. –

관련 문제