루프백을 제외한 주소를 바인딩하고 싶습니다.

litwind의 이미지

server.sin_addr.s_addr = htonl(INADDR_ANY);

이렇게 하니까 루프백까지도 바인딩하고 있네요.

-_-; 당연한 얘기지만...

루프백을 제외하고 바인딩하고 싶습니다.

방법이 없나요?

jemiro의 이미지

와일드 카드 바인딩이 아니라
ioctl로 네트워크 인터페이스 주소를 알아내서
특정 주소를 바인딩 해주면
특정 아이피 하나로만 소켓이 바인딩 될것이고.

인터페이스가 하나 일 경우에는 위의 방법으로 해결 할수 있겠지만..
여러개 있을경우.. 안될테니..

와일드카드 바인딩후 ,
연결이 들어 왔을때 주소를 확인해서
로컬호스트일경우 연결을 닫아 주는 꽁수가 떠오르는군요.

테스트 코드 조금 작성해보시면 될듯..

pynoos의 이미지

이전 글에서 자신의 IP를 찾는 예제를 구하실 수 있습니다.

http://bbs.kldp.org/viewtopic.php?t=768

litwind의 이미지

감사합니다. ^^

여담인데..

INADDR_ANY - INADDR_LOOPBACK

같은 방법은 없나요?

무엇이 더 필요하단 말인가...

pynoos의 이미지

^^ 없습니다...

저도 여담인데....

어떤 일을 하시다가 그런 기능이 필요하시게 됐죠?

저는 ssh port forwarding을 좀 편하게 써볼라다가.. 필요했었는데..

litwind의 이미지

^^;
프로세스 두 놈이..

프로세스 A는 특정 포트 루프백만 잡고,

프로세스 B는 특정 포트 다 잡고..

이러고 있다가 B로 패킷 날아오면..

처리해서 같은 포트의 127.0.0.1 로 보내면 이걸 A가 받고.

뭐 그런 호작질을 하고 있습니다..ㅋㅋㅋ

무엇이 더 필요하단 말인가...

jemiro의 이미지

unix domain socket을 사용하면 쉽게 해결 할수 있을텐데요.