Tạo ổ cắm có tên Unix từ dòng lệnh


Câu trả lời:


21

Không có tương đương chính xác của mkfifo cho ổ cắm, tức là không có lệnh nào chỉ tạo ra một ổ cắm "treo". Điều này là vì lý do lịch sử: hàm của máy chủ bind (), cái tạo ra tên socket / inode trong hệ thống tập tin, không thành công nếu tên này đã được sử dụng. Nói cách khác, máy chủ không thể hoạt động trên một ổ cắm có sẵn.

Vì vậy, nếu bạn đã tạo ổ cắm sớm hơn, trước tiên bạn cần phải xóa máy chủ. Không có lợi ích. Như bạn thấy với câu trả lời của Gregory, bạn có thể tạo một ổ cắm NẾU bạn giữ một máy chủ cho nó, chẳng hạn như netcat. Khi một máy chủ không còn, ổ cắm cũ sẽ biến mất. Một máy chủ mới có một ổ cắm mới và tất cả các máy khách cần kết nối lại, mặc dù tên của ổ cắm giống hệt nhau.


15

Hầu hết các netcat (nc) gần đây và các chương trình tương tự (socat theo như tôi biết) đều có các tùy chọn ổ cắm tên miền.
Khác, bạn có thể có một cái nhìn tại ucspi-unix


1
+1 cho nctrên BSD.
Clint Pachl

1
Trên Debian:# sudo apt-get install netcat-openbsd
Tiến sĩ Koutheir Attouchi

2
ok khi bạn cài đặt nó, làm thế nào để bạn tạo một "tệp ổ cắm"
Alexander Mills

8

Bạn có thể sử dụng python:

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

Còn C, xem câu trả lời này .


mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }để sử dụng vỏ dễ dàng: mksock /tmp/test.sock
Tino

0

Tôi chỉ đơn giản là sử dụng netcatvà tiếp tục lắng nghe trong trường hợp như vậy:

nc -lkU aSocket.sock

bạn nên sử dụng netcat-openbsd . netcat-truyền thống không có -Ucông tắc dành cho ổ cắm tên miền Unix.


-k Buộc nc phải lắng nghe một kết nối khác sau khi kết nối hiện tại của nó được hoàn thành. Đó là một lỗi để sử dụng tùy chọn này mà không có tùy chọn -l. -U Chỉ định sử dụng ổ cắm tên miền UNIX.
Johan Boulé
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.