Pregunta

Estoy ansioso por ver si es posible asignar un socket UNIX a una toma de INET. La situación es simplemente que me gustaría conectar a un servidor MySQL. Desafortunadamente se ha sockets INET desactivado y por lo tanto sólo se puede conectar con conectores Unix. Las herramientas que estoy utilizando / escritura tienen que conectarse a una toma de INET, así que estoy tratando de ver si puedo asignar una a la otra.

Se tomó una buena cantidad de buscar pero encontré socat , que supuestamente hace lo que estoy buscando. Me preguntaba si alguien tiene alguna sugerencia sobre cómo lograr esto. La línea de comandos He estado usando (con un éxito parcial) es:

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

Ahora puedo hacer conexiones y hablar con el servidor. Por desgracia, cualquier intento de hacer múltiples conexiones fallan, ya que necesito para usar la opción tenedor pero esta opción parece hacer que las conexiones no funcional.

Sé que puedo abordar el problema con Perl (mi idioma preferido), pero prefiero evitar escribir toda la aplicación a mí mismo. Me familiarizados con las bibliotecas IO :: Socket, simplemente estoy esperando que alguien tiene experiencia haciendo este tipo de cosas. Abierto a sugerencias / ideas.

Gracias.

¿Fue útil?

Solución

Invertir el orden de los argumentos a socat, y funciona.

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

Esto indica socat a

  1. escuchar en el puerto TCP 6666 (con SO_REUSEADDR)
  2. Espera para aceptar una conexión
  3. Cuando se establece una conexión, tenedor. En el niño, seguir los siguientes pasos. En los padres, ir a 2.
  4. Abrir una conexión de dominio UNIX a la toma de /var/lib/mysql/mysql.sock.
  5. Transferencia de datos entre los dos puntos finales, a continuación, de salida.

La escritura es a la inversa

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

no funciona, porque esto da instrucciones a socat

  1. Abrir una conexión de dominio UNIX a la toma de /var/lib/mysql/mysql.sock.
  2. escuchar en el puerto TCP 6666 (con SO_REUSEADDR)
  3. Espera para aceptar una conexión
  4. Cuando se establece una conexión, desovar un niño trabajador para transferir datos entre las dos direcciones.
  5. El padre continúa aceptar conexiones en la segunda dirección, pero ya no tiene la primera dirección disponible: se le dio al primer niño. Así que nada útil se puede hacer a partir de ahora.

Otros consejos

Es posible que desee considerar hacerlo en el POE -. Es biblioteca asíncrona para hacer frente a eventos, así que parece grande para la tarea

No es 100% relevante, pero lo uso POE escribir proxy entre protocolo sin estado (HTTP) y el protocolo con estado (sesión de telnet, y más específicamente - sesión MUD), y era bastante simple - Puede comprobar el código de aquí: http: / /www.depesz.com/index.php/2009/04/08/learning-poe-http-2-mud-proxy/.

En los comentarios también sugirieron que alguien Coro / AnyEvent - No he jugado con él todavía, pero es posible que desee comprobar

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top