2014-12-03 2 views
1

파일 설명자를 비 차단으로 설정하는 두 가지 방법이 있습니다.파일 설명자를 비 차단으로 설정하는 방법은 무엇입니까?

fcntl(conn_fd, F_SETFD, (fcntl(conn_fd, F_GETFD, 0)|O_NONBLOCK)); 

또는

fcntl(conn_fd, F_SETFD, (fcntl(conn_fd, F_GETFD)|O_NONBLOCK)); 

void setnonblocking(int sock) { 
    int opt; 

    opt = fcntl(sock, F_GETFL); 
    if (opt < 0) { 
     printf("fcntl(F_GETFL) fail."); 
    } 
    opt |= O_NONBLOCK; 
    if (fcntl(sock, F_SETFL, opt) < 0) { 
     printf("fcntl(F_SETFL) fail."); 
    } 
} 

기능 setnonblocking는 epoll에 새를 얻을 때 사용 파일 기술자가 다른 안되을 나누었다 비 차단 설정할 수 있습니다 이유

연결.

답변

1

O_NONBLOCK은 파일 설명자 플래그가 아닌 파일 상태 플래그입니다. 당신이 파일 상태 플래그가 아닌 파일 기술자 플래그를 수정할 필요로 fcntl(conn_fd, F_SETFD, (fcntl(conn_fd, F_GETFD)|O_NONBLOCK));에서 어쩌면

는, 당신은 F_SETFLF_GETFLF_SETFDF_GETFD을 변경해야합니다.

+0

필자는 F_SETFD를 F_SETFL으로 변경하고 작동합니다. 기존 플래그의 상태가 필요합니다 .thx! – zhangkai

관련 문제