Hallo Community,
Ich habe schon ewig bei Google nach einer Lösung gesucht, fand aber nichts nützliches
Es geht nähmlich darum, dass ich versuche einen Socket über den FD (File Descriptor) anzusprechen (von einem anderen Programm).
Bzw.
Alles anzeigen
Gibt es da eine Möglichkeit?
Grüße
Ich habe schon ewig bei Google nach einer Lösung gesucht, fand aber nichts nützliches

Es geht nähmlich darum, dass ich versuche einen Socket über den FD (File Descriptor) anzusprechen (von einem anderen Programm).
Bzw.
Quellcode
- #!/usr/bin/php -q
- <?php
- function o($message) {
- echo '# '.$message.PHP_EOL;
- }
- $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
- socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
- var_dump($socket);
- socket_bind($socket, 'bli bla blubb', 12345);
- o('bound to ip');
- socket_listen($socket);
- o('listen now');
- $clients = array(
- 'socket' => $socket
- );
- o(posix_getpid());
- while (true) {
- $currentClients = $clients;
- $selectClientsFromSocket = @socket_select($currentClients, $write = NULL, $execpt = NULL, 0, 15000);
- if ($selectClientsFromSocket < 1) {
- continue;
- }
- if (in_array($socket, $currentClients)) {
- $clientSocket = socket_accept($socket);
- $clients[] = $clientSocket;
- unset($currentClients['socket']);
- o('a new client connected to the server');
- var_dump($clientSocket);
- $PID = pcntl_fork();
- if ($PID == 0) {
- while (true) {
- $data = socket_read($clientSocket, 1024);
- if ($data === '' || $data == false) break;
- o(': '.$data);
- sleep(1);
- }
- } else {
- o($PID);
- $PID = pcntl_fork();
- if ($PID == 0) {
- $socket = fdopen(4, 'w'); // bzw. fopen('php://fd/4', 'w')
- fwrite($socket, 'funktioniert');
- $socket = fopen('/proc/'.posix_getpid().'/fd/4', 'w');
- fwrite($socket, 'funktioniert nicht');
- exit;
- }
- }
- }
- }
- ?>
$ php -v
PHP 5.4.1-1~lucid+1 (cli) (built: May 2 2012 09:02:37)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
Gibt es da eine Möglichkeit?
Grüße
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von iSn0w ()