Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je mapper un socket Unix local sur un socket inet?

Inversez l'ordre de vos arguments en socat , et ça marche.

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

Ceci indique socat à

  1. Écouter sur le port TCP 6666 (avec SO_REUSEADDR )
  2. Attendre pour accepter une connexion
  3. Lorsqu'une connexion est établie, bifurquez. Chez l'enfant, continuez les étapes ci-dessous. Dans le parent, allez à 2.
  4. Ouvrir une connexion de domaine UNIX vers /var/lib/mysql/mysql.sock prise.
  5. Transférez les données entre les deux points de terminaison, puis quittez.

Écrire dans l'autre sens

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

ne fonctionne pas, car cela indique socat à

  1. Ouvrir une connexion de domaine UNIX vers /var/lib/mysql/mysql.sock prise.
  2. Écouter sur le port TCP 6666 (avec SO_REUSEADDR )
  3. Attendre pour accepter une connexion
  4. Lorsqu'une connexion est établie, générez un enfant de travail pour transférer les données entre les deux adresses.
  5. Le parent continue d'accepter les connexions sur la deuxième adresse, mais n'a plus la première adresse disponible :elle a été donnée au premier enfant. Donc, rien d'utile ne peut être fait à partir de ce moment.