Domanda

Sono curioso di sapere se è possibile mappare un socket UNIX a una presa INET. La situazione è semplicemente che mi piacerebbe di connettersi a un server MySQL. Purtroppo è socket INET disattivato e quindi mi può connettersi solo con socket UNIX. Gli strumenti che sto usando / scrittura devono connettersi a una presa INET, quindi sto cercando di vedere se riesco a mappare uno verso l'altro.

Ci sono voluti una discreta quantità di ricerca ma ho trovato socat , che fa presumibilmente quello che sto cercando. Mi chiedevo se qualcuno ha qualche suggerimento su come raggiungere questo obiettivo. La riga di comando che ho usato (con successo parziale) è:

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

Ora posso creare dei legami e comunicare con il server. Purtroppo ogni tentativo di effettuare connessioni multiple non riescono come ho bisogno di utilizzare l'opzione della forcella ma questa opzione sembra rendere i collegamenti non funzionali.

So di poter affrontare il problema con il Perl (la mia lingua preferita), ma preferirei evitare di scrivere l'intera implementazione me stesso. Ho familiarità con le librerie :: IO Socket, sto semplicemente sperando qualcuno ha esperienza di fare questo genere di cose. Aperto ai suggerimenti / idee.

Grazie.

È stato utile?

Soluzione

Invertire l'ordine dei vostri argomenti per socat, e funziona.

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

Ciò indica socat a

  1. ascolto sulla porta TCP 6666 (con SO_REUSEADDR)
  2. L'ora di accettare una connessione
  3. Quando viene effettuata una connessione, forchetta. Nel bambino, continuare la procedura riportata di seguito. Nel genitore, andare a 2.
  4. Aprire una connessione dominio UNIX alla presa /var/lib/mysql/mysql.sock.
  5. Trasferire i dati tra i due punti finali, quindi uscire.

Scriverlo il contrario

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

non funziona, perché questo indica socat a

  1. Aprire una connessione dominio UNIX alla presa /var/lib/mysql/mysql.sock.
  2. ascolto sulla porta TCP 6666 (con SO_REUSEADDR)
  3. L'ora di accettare una connessione
  4. Quando viene effettuata una connessione, deporre le uova un bambino lavoratore di trasferire i dati tra i due indirizzi.
  5. Il genitore continua ad accettare le connessioni al secondo indirizzo, ma non ha più il primo indirizzo disponibile: è stato dato per il primo figlio. Quindi nulla di utile può essere fatto da questo punto in poi.

Altri suggerimenti

Si potrebbe prendere in considerazione di farlo in POE -. È biblioteca asincrona per trattare con gli eventi, così sembra grande per l'operazione

Non è rilevante al 100%, ma io uso POE scrivere proxy tra protocollo stateless (HTTP) e il protocollo statefull (sessione telnet, e più specificamente - sessione di MUD), ed era piuttosto semplice - È possibile controllare il codice in qui: http: / /www.depesz.com/index.php/2009/04/08/learning-poe-http-2-mud-proxy/.

Nel commenti qualcuno ha suggerito anche Coro / AnyEvent - Non ho giocato con esso ancora, ma si potrebbe desiderare di controllare

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top