سؤال

أنا فضولي إذا كان من الممكن تعيين مقبس UNIX على مقبس INET. الوضع هو ببساطة أن أرغب في الاتصال بخادم MySQL. لسوء الحظ، تم تعطيل مقطوعات INET، وبالتالي يمكنني الاتصال فقط بمقبآت UNIX. يجب أن تتصل الأدوات التي أستخدمها / الكتابة إلى مقبس INET، لذلك أحاول معرفة ما إذا كان يمكنني تعيين One On الآخر.

استغرق الأمر كافية عادلة من البحث ولكني وجدت سيارات, ، الذي يزعم أن ما أبحث عنه. كنت أتساءل عما إذا كان لدى أي شخص أي اقتراحات حول كيفية إنجاز هذا. سطر الأوامر التي استخدمتها (مع نجاح جزئي) هي:

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

الآن يمكنني تقديم اتصالات وتحدث إلى الخادم. لسوء الحظ، تفشل أي محاولات في اتخاذ اتصالات متعددة لأنني بحاجة إلى استخدام خيار الشوكة ولكن يبدو أن هذا الخيار يبدو أنه يجعل الاتصالات غير وظيفية.

أعلم أنني أستطيع معالجة المشكلة مع بيرل (لغتي المفضلة)، لكنني أفضل تجنب كتابة التنفيذ بأكمله بنفسي. أنا على دراية بمكتبات 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. يستمر الأصل في قبول الاتصالات في العنوان الثاني، ولكن لم يعد لديه العنوان الأول المتاح: تم إعطاؤه للطفل الأول. لذلك لا يمكن القيام بأي شيء مفيد من هذه النقطة.

نصائح أخرى

نعم، يمكنك القيام بذلك في بيرل.

ينظر الى perlipc., io :: حدد, IO :: المقبس و دليل BEEJ لبرمجة الشبكات.

قد ترغب في التفكير في القيام بذلك في POE - إنها مكتبة غير متزامنة للتعامل مع الأحداث، لذلك يبدو رائعا للمهمة.

ليس من المناسب 100٪، لكنني استخدم PoE لكتابة وكيل بين بروتوكول عديمي الجنسي (HTTP) وبروتوكول ProTuxfull (جلسة Telnet، ودورة طينية أكثر تحديدا)، وكان بسيطة إلى حد ما - يمكنك التحقق من التعليمات البرمجية هنا: http://www.depesz.com/index.php/2009/04/08/learning-poe-http-2-mud-proxy/.

في التعليقات اقترح شخص ما Coro / Anyevent - لم ألعب معها بعد، لكن قد ترغب في التحقق من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top