2010-12-14 3 views
0

제 질문은 AF_UNIX와 SOCK_DGRAM을 사용하는 IPC에 관한 것입니다. 코드에서 일부 오류 검사를 제거한 후 내 서버 코드는 다음과 같습니다SOCK_DGRAM을 사용하여 AF_UNIX를 사용하면 유닉스 소켓 이름 길이에 문제가 발생합니다.

sd = socket(AF_UNIX, SOCK_DGRAM, 0); 
memset(&serveraddr, 0, sizeof(serveraddr)); 
serveraddr.sun_family = AF_UNIX; 
strcpy(serveraddr.sun_path, SERVER_PATH); 
length = BUFFER_LENGTH; 
rc = setsockopt(sd, SOL_SOCKET, SO_RCVLOWAT, (char *)&length, sizeof(length)); 
rc = bind(sd, (struct sockaddr *)&serveraddr, SUN_LEN(&serveraddr)); 
rc = recv(sd, buffer, sizeof(buffer), 0)); 

코드에서 일부 오류 검사를 제거한 후 내 클라이언트 코드는 다음과 같습니다

sd = socket(AF_UNIX, SOCK_DGRAM, 0); 
memset(&serveraddr, 0, sizeof(serveraddr)); 
serveraddr.sun_family = AF_UNIX; 
strcpy(serveraddr.sun_path, SERVER_PATH); 
memset(buffer, 'a', sizeof(buffer)); 
socklen_t server_length = sizeof(struct sockaddr); 
sendto(sd, buffer, sizeof(buffer), 0, (struct sockaddr *)&serveraddr, server_length); 

weired 문제는 내가이의 거짓말을 볼 수 있습니다 SERVER_PATH의 정의. 내 SERVER_PATH의 길이가 14자를 넘으면 클라이언트 전송 (...)이 오류 ("해당 파일 또는 디렉토리 없음")와 함께 실패합니다.

몇 가지 포인트는주의 사항 : 내가 레드햇 64 비트를 사용하고

어떤 생각?

답변

2

나는 문제가 sizeof(struct sockaddr)과 관련이있다 생각한다. 주소 필드 14 개 문자를 허용 내 시스템에. sizeof(struct sockaddr_un)을보십시오.

+0

내 문제를 발견했으면 좋겠지 만 문제는 아닙니다. 덕분에 . – Oded

+0

죄송합니다. 귀하의 제안을 다시 확인했으며 문제가 해결 된 것으로 보입니다. 감사합니다. – Oded

+0

반갑습니다. – NPE

관련 문제