在另外一个客户端执行 php s.php后, 通过nc -lU /tmp/tg.sck 建立的unix domain socket 有接收到消息。
setPersistent(true);// Now add the handler$logger->pushHandler($handler, Logger::DEBUG);// You can now use your logger$logger->info('My logger is now ready');
--------------------------------------------------------------------------
I need to create a script that listens to a unix socket and forward the incoming stream to a bot. The scripts are unable to connect. The issues seems to be related to the order of things.
Proof of case
I have created a socket and I am able to write to it. In session 1, I create a listener connection
nc -lU /tmp/tg.sck
In session 2, I write to the socket.
while true; do echo "hello"; sleep 2; done | nc -U /tmp/tg.sck
The above only works if I do it in that order. ==> Writing before you have a listener results in an error.
Using scripts (does not work)
When I replace the listing process with a PHP (or Python) script, the connection is refused because the socket is not opened.
$ python test.py Connecting... socket.error: [Errno 111] Connection refused
or
$ php test.php Warning: fsockopen(): unable to connect to unix:///tmp/tg.sck:-1 (Connection refused)
Changing the order of things
If I start a working listener using the command nc -lU /tmp/tg.sck
then the script does not die, but the writer process does.
Listener scripts
import socketimport sysserver_address = '/tmp/tg.sck' # Analogous to TCP (address, port) pair sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) sock.connect(server_address) sock.recv(512)
and the php script
$fp = fsockopen('unix:///tmp/tg.sck', -1, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)\n"; } else { while (!feof($fp)) { echo fgets($fp, 4096); } fclose($fp); }