สร้าง Unix Named Socket จาก Command Line


คำตอบ:


21

ไม่มีสิ่งใดเทียบเท่า mkfifo สำหรับซ็อกเก็ตที่แน่นอนนั่นคือไม่มีคำสั่งที่เพิ่งสร้างซ็อกเก็ต "ห้อย" นี่คือเหตุผลในอดีต: ฟังก์ชั่นของเซิร์ฟเวอร์ผูก () หนึ่งที่สร้างชื่อซ็อกเก็ต / inode ในระบบแฟ้มล้มเหลวถ้าชื่อที่ใช้แล้ว กล่าวอีกนัยหนึ่งเซิร์ฟเวอร์ไม่สามารถทำงานบนซ็อกเก็ตที่มีอยู่แล้ว

ดังนั้นหากคุณสร้างซ็อกเก็ตก่อนหน้านี้เซิร์ฟเวอร์จะต้องถูกลบทิ้งก่อน ไม่มีประโยชน์ ตามที่คุณเห็นด้วยคำตอบของ Gregory คุณสามารถสร้างซ็อกเก็ตถ้าคุณเก็บเซิร์ฟเวอร์ไว้เช่น netcat เมื่อเซิร์ฟเวอร์หายไปซ็อกเก็ตเก่าจะหายไป เซิร์ฟเวอร์ใหม่มีซ็อกเก็ตใหม่และไคลเอนต์ทั้งหมดจำเป็นต้องเชื่อมต่อใหม่แม้ว่าชื่อของซ็อกเก็ตจะเหมือนกันก็ตาม


15

netcat ล่าสุด (nc) และโปรแกรมที่คล้ายกัน (socat เท่าที่ฉันรู้) มีตัวเลือกซ็อกเก็ตโดเมน
มิฉะนั้นคุณสามารถดู ucspi-unix


1
+1 สำหรับncใน BSD
Clint Pachl

1
On Debian:# sudo apt-get install netcat-openbsd
Dr. Koutheir Attouchi

2
ตกลงเมื่อคุณติดตั้งแล้วคุณจะสร้าง "ไฟล์ซ็อกเก็ต" ได้อย่างไร
Alexander Mills

8

คุณสามารถใช้หลาม:

python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/test.sock')"

นอกจากนี้ C ดูคำตอบนี้


mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }สำหรับการใช้งานเปลือกง่าย: mksock /tmp/test.sock
Tino

0

ฉันใช้netcatและคอยฟังในกรณีเช่นนี้:

nc -lkU aSocket.sock

คุณควรใช้netcat-OpenBSD netcat-traditionalไม่มี-Uสวิตช์ซึ่งใช้สำหรับซ็อกเก็ต Unix Domain


-k บังคับให้ nc คอยฟังการเชื่อมต่ออื่นหลังจากการเชื่อมต่อปัจจุบันเสร็จสมบูรณ์ เป็นข้อผิดพลาดในการใช้ตัวเลือกนี้โดยไม่มีตัวเลือก -l -U ระบุให้ใช้ซ็อกเก็ตโดเมน UNIX
Johan Boulé
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.