Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso mappare un socket unix locale su un socket inet?

Inverti l'ordine dei tuoi argomenti in socat , e funziona.

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

Questo indica socat a

  1. Ascolta sulla porta TCP 6666 (con SO_REUSEADDR )
  2. Aspetta di accettare una connessione
  3. Quando viene stabilita una connessione, fork. Nel bambino, continua i passaggi seguenti. Nel genitore, vai a 2.
  4. Apri una connessione di dominio UNIX a /var/lib/mysql/mysql.sock presa.
  5. Trasferisci i dati tra i due endpoint, quindi esci.

Scrivendolo al contrario

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

non funziona, perché questo indica socat a

  1. Apri una connessione di dominio UNIX a /var/lib/mysql/mysql.sock presa.
  2. Ascolta sulla porta TCP 6666 (con SO_REUSEADDR )
  3. Aspetta di accettare una connessione
  4. Quando viene stabilita una connessione, genera un figlio lavoratore per trasferire i dati tra i due indirizzi.
  5. Il genitore continua ad accettare connessioni sul secondo indirizzo, ma non ha più a disposizione il primo indirizzo:era stato dato al primo figlio. Quindi nulla di utile può essere fatto da questo momento in poi.