파일-이름 공간 소켓의 용도는?
글쓴이: 버그소년 / 작성시간: 수, 2003/02/12 - 10:24오전
glibc라이브러리 메뉴얼을 보다가
The File Namespace에 관한 내용이 있더군요.
메뉴얼에 있는 예제코드를 컴파일하니 퍼미션에 s가 포함된 파일 생성은
됩니다.
예전에 mSQL쓸때 비슷한 소켓파일을 본것도 같고.. (다른거였나?? ^^)
아무튼 이 파일-이름공간 소켓의 용도가 궁금합니다.
지식이 짧아 메뉴얼을 아무리 읽어도 어디에다 쓰는 물건인지 모르겠네요.
대충 이름이 소켓이니 프로세스간 통신도 가능할 것도 같고.. 파일을 바인드
하니까 프로세스가 뜰때 만들고, 죽을때 제거해서 중복실행 막을때 쓸 수도
있겠단 생각이 드는데..
정확한 사용방법과 용도를 알고싶습니다.
(어린백성을 위해 간단한 샘플코드도 부탁.. ^^)
그럼 고수님들의 답변 기다리겠습니다.
Forums:
Unix socket 으로 알려진것이지요..
Unix 계열에서 사용하는 것인데, namespace 가 file system 내에 존재하기 때문에 이름이 Unix socket에서 일반화된 명칭으로 바뀐걸로 알고 있습니다.
IP base socket은 namespace가 internet address 및 port 형태로 주어지기 때문에 bind 할때 필요한 고유주소가 IP address, port 입니다. protocol family PF_INET 으로 생성되고,
반면, 이 녀석은 Protocol family PF_FILE, PF_UNIX 등으로 만들어 집니다. 이 때, 고유한 주소는 file path 를 따라 만들어 집니다.
주 용도는 local machine 상의 process 끼리 데이터를 주고 받을 때, 빠른 입출력을 지원하죠.
아마 인터넷 어딘가에, PIPE, TCP/IP, UNIX Socket 애 대한 비교자료를
구할 수 있을 것 같은데요..
mysql 뿐아니라 X window도 local에서는 unix socket (file namespace socket)을 사용하여 통신합니다.
예제코드는.. 생략합니다.
---
http://coolengineer.com
다시 질문..
답변 감사드립니다.
몇번 테스트를 해 보니 통신은 잘 되는군요.
테스트 도중 몇가지 의문점이 생겨서 이렇게 다시 글을 씁니다.
SOCK_DGRAM으로는 작동이 잘 되는데 SOCK_STREAM으로는 안되는군요.
원래그런건지 궁금하네요.
그리고, 보통 인터넷 소켓은 MTU가 지정되어 그이상은 패킷이 나누어져서
전송되는데 파일소켓은 그렇지 않은듯 합니다. 파일소켓은 MTU와는 상관없
이 동작하는지도 궁금합니다..
그리고, 한가지 더... 양방향 통신이 되지 않는것 같네요...
recvfrom에서 얻어온 struct sockaddr_un의 값이 없습니다.
원래 파이프처럼 단방향인지도 궁금하네요.. ^^;
가끔은 밥을 굶어도 살 수 있다.
다 잘될 터인데...
SOCK_DGRAM, SOCK_STREAM 둘다 지원합니다.
다만, SOCK_STREAM의 경우도 bind 후 connect 해야하구요.
MTU와 상관없겠지요. network을 통하는 bandwidth 문제가 없을테니까요.
양방향도 됩니다.
struct sockaddr_un 값이 없다는 것이 무슨 말씀이지요?
---
http://coolengineer.com
다른 문제는 제가 잠시 착각했었네요.STREAM도 되고, STRE
다른 문제는 제가 잠시 착각했었네요.
STREAM도 되고, STREAM은 양방향도 되고요....
그런데 DGRAM은 좀 이상하네요.
recvfrom으로부터 얻어지는 clinet_name과 size를 그대로 sendto에 넣으면
"부적절한 인수"라는 에러가 뜹니다. ( 런타임시.. )
제가 생각해도 그냥 UDP이면 되어야할텐데 그렇지 않네요.
코드는 위와같습니다.
/*##...##*/ 로 표시된 부분에서 client_name값과 size 값이
client_name.sun_family = 16 ( AF_NETLINK )
client_name.sun_path는 없슴
size = 2
이렇게 나오는군요.. 무슨 문제일까요?
가끔은 밥을 굶어도 살 수 있다.
올려놓으신 소스가 server datagram socket으로 생각됩니다
올려놓으신 소스가 server datagram socket으로 생각됩니다만.
제 생각에 소스는 문제는 없어 보입니다.
화면에 받은 내용은 잘 출력되는지 확인해 봐주시고...
혹시 server_fd 값이 Unix socket이 아닌지 (그럴리 있겠습니까만)
봐주시고...
혹시 BSD라면 sun_path 의 길이 제한이 있는 것으로 알고 있습니다.
확인해주셔요...
그 길이 제한 때문에 대개 unix socket의 전체 경로가 짧게 표현됩니다.
---
http://coolengineer.com
계속 귀찮게 하는것 같아 죄송하네요.. ^^;올린 코드는 서버 쪽
계속 귀찮게 하는것 같아 죄송하네요.. ^^;
올린 코드는 서버 쪽 코드입니다.
recvfrom동작시에는 특별한 문제점 없이 수신이 잘되고있습니다.
테스트 환경은 리눅스 데비안입니다.
잠시 눈에 띄는 리눅스 가지고 테스트를 한거라 버전은 잘 모르겠네요.
path는 절대경로를 사용하지 않고, 그냥 파을명만을 지정했습니다.
(이것이 문제일까요?? 내일 출근해서 절대경로로 테스트를 해봐야겠네요)
계속 귀찮게 해서 죄송합니다.. ^^;
막히는게 있음 다른일을 못해서요.. 그럼 이만..
가끔은 밥을 굶어도 살 수 있다.
댓글 달기