문제

UNIX 소켓을 INET 소켓에 매핑 할 수 있는지 궁금합니다. 상황은 단순히 MySQL 서버에 연결하고 싶다는 것입니다. 불행히도 INET 소켓이 비활성화되어 있으므로 유닉스 소켓과 만 연결할 수 있습니다. 내가 사용중인 도구/쓰기 도구는 INET 소켓에 연결해야하므로 다른 하나에 매핑 할 수 있는지 확인하려고합니다.

상당한 양의 검색이 걸렸지 만 소사이어티, 내가 찾고있는 일을 취합니다. 나는 누군가가 이것을 달성하는 방법에 대한 제안이 있는지 궁금합니다. 내가 사용했던 명령 줄 (부분 성공)은 다음과 같습니다.

socat -v UNIX-CONNECT:/var/lib/mysql/mysql.sock TCP-LISTEN:6666,reuseaddr

이제 연결을 만들고 서버와 대화 할 수 있습니다. 불행히도 포크 옵션을 사용해야하므로 여러 연결을하려는 시도가 실패하지만이 옵션은 연결을 작동하지 않는 것으로 보입니다.

나는 Perl (내가 선호하는 언어)로 문제를 해결할 수 있다는 것을 알고 있지만, 전체 구현을 직접 작성하지 않기를 바랍니다. 나는 io :: 소켓 라이브러리에 익숙합니다. 나는 누군가가 이런 종류의 일을 경험하기를 바랍니다. 제안/아이디어에 열려 있습니다.

감사.

도움이 되었습니까?

해결책

당신의 주장의 순서를 뒤집습니다 socat, 그리고 그것은 작동합니다.

socat -v tcp-l:6666,reuseaddr,fork unix:/var/lib/mysql/mysql.sock

이것은 지시합니다 socat 에게

  1. TCP 포트 6666에서 듣습니다 ( SO_REUSEADDR)
  2. 연결을 수락하기를 기다립니다
  3. 연결이 이루어지면 포크. 아이의 경우 아래 단계를 계속하십시오. 부모에게서 2로 이동하십시오.
  4. UNIX 도메인 연결을 엽니 다 /var/lib/mysql/mysql.sock 소켓.
  5. 두 종점간에 데이터를 전송 한 다음 종료합니다.

다른 방법으로 글을 씁니다

socat -v unix:/var/lib/mysql/mysql.sock tcp-l:6666,reuseaddr,fork

이 지시가 있기 때문에 작동하지 않습니다 socat 에게

  1. UNIX 도메인 연결을 엽니 다 /var/lib/mysql/mysql.sock 소켓.
  2. TCP 포트 6666에서 듣습니다 ( SO_REUSEADDR)
  3. 연결을 수락하기를 기다립니다
  4. 연결이 이루어지면 근로자 자녀를 스폰하여 두 주소간에 데이터를 전송하십시오.
  5. 부모는 두 번째 주소에서 계속 연결을 수락하지만 더 이상 첫 번째 주소가 없습니다. 첫 번째 자녀에게 주어졌습니다. 따라서이 시점에서 유용한 것은 없습니다.

다른 팁

예, Perl 에서이 작업을 수행 할 수 있습니다.

보다 perlipc, io :: 선택, io :: 소켓 그리고 Beej의 네트워크 프로그래밍 안내서.

POE에서 수행하는 것을 고려할 수 있습니다. 이벤트를 다루기위한 비동기 라이브러리이므로 작업에 적합한 것처럼 보입니다.

100% 관련은 아니지만 POE를 사용하여 Sationeless Protocol (HTTP)과 StateFull 프로토콜 (Telnet Session,보다 구체적으로 Mud 세션) 사이에 프록시를 작성하며 다소 간단했습니다. 여기에서 코드를 확인할 수 있습니다. http://www.depesz.com/index.php/2009/04/08/learning-poe-http-2-mud-proxy/.

의견에서 누군가가 Coro/Anyevent를 제안했습니다. 아직 연주하지는 않았지만 확인하고 싶을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top