Socket über FD ansprechen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Socket über FD ansprechen

    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.

    Quellcode

    1. #!/usr/bin/php -q
    2. <?php
    3. function o($message) {
    4. echo '# '.$message.PHP_EOL;
    5. }
    6. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    7. socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
    8. var_dump($socket);
    9. socket_bind($socket, 'bli bla blubb', 12345);
    10. o('bound to ip');
    11. socket_listen($socket);
    12. o('listen now');
    13. $clients = array(
    14. 'socket' => $socket
    15. );
    16. o(posix_getpid());
    17. while (true) {
    18. $currentClients = $clients;
    19. $selectClientsFromSocket = @socket_select($currentClients, $write = NULL, $execpt = NULL, 0, 15000);
    20. if ($selectClientsFromSocket < 1) {
    21. continue;
    22. }
    23. if (in_array($socket, $currentClients)) {
    24. $clientSocket = socket_accept($socket);
    25. $clients[] = $clientSocket;
    26. unset($currentClients['socket']);
    27. o('a new client connected to the server');
    28. var_dump($clientSocket);
    29. $PID = pcntl_fork();
    30. if ($PID == 0) {
    31. while (true) {
    32. $data = socket_read($clientSocket, 1024);
    33. if ($data === '' || $data == false) break;
    34. o(': '.$data);
    35. sleep(1);
    36. }
    37. } else {
    38. o($PID);
    39. $PID = pcntl_fork();
    40. if ($PID == 0) {
    41. $socket = fdopen(4, 'w'); // bzw. fopen('php://fd/4', 'w')
    42. fwrite($socket, 'funktioniert');
    43. $socket = fopen('/proc/'.posix_getpid().'/fd/4', 'w');
    44. fwrite($socket, 'funktioniert nicht');
    45. exit;
    46. }
    47. }
    48. }
    49. }
    50. ?>
    Alles anzeigen


    $ 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 ()