저는 Mac OS X 용 두 부분으로 분리 된 응용 프로그램 (데몬과 에이전트)을 작성하고 있습니다. 데몬과 에이전트 사이의 통신을 위해 표준 유닉스 소켓을 사용하고 있습니다. 즉, 소켓은 PF_UNIX
및 SOCK_STREAM
으로 생성됩니다.유닉스 도메인 소켓 차단 문제가 있습니다.
에이전트가 생성 될 때 (사용자가 로그인 할 때마다) 먼저 에이전트에 연결하는 것이 소켓에 연결하는 것입니다. 이것은 첫 번째 에이전트에서 완벽하게 작동하는 것 같습니다. 그러나 두 번째 에이전트가 연결될 때 데몬은 다음과 같은 문제가 발생합니다.
읽을 수있는 데이터를 확인하려면 select()
을 사용하고 있습니다. select()
호출이 성공하고 읽을 데이터가 있음을 나타냅니다. 내가 전화 할 때 그러나 recv()
는 -1
로 반환하고, errno
는 "Resource temporarily unavailable".
이제 35
로 설정, 또는, 나는 비 블로킹 소켓이 기대,하지만 난 트리플가-확인이 - I가 소켓을 설정하지 비 차단.
제가 알 수있는 한, 이것은 두 번째 에이전트가 동일한 유닉스 소켓에 연결할 때만 발생합니다. 내가 하나의 데몬과 하나의 에이전트로 제한된다면 모든 것이 완벽하게 작동하는 것처럼 보입니다. 이 이상한 행동을 일으키는 원인은 무엇일까요?