├── README.md ├── usocksender.php └── usockhandler.php /README.md: -------------------------------------------------------------------------------- 1 | Unix-Domain-Sockets 2 | =================== 3 | 4 | Info 5 | ==== 6 | Background process Unix Socket Domain (http://en.wikipedia.org/wiki/Unix_domain_socket) and client script to send a data. 7 | 8 | Details 9 | ======= 10 | An example shows PHP example for communication inside IPC (inter process communication) and sockets using protocol TCP. It will send a raw socket stream without acknowledgment. 11 | 12 | Author 13 | ====== 14 | Marin Sagovac 15 | Croatia 16 | 2014 17 | -------------------------------------------------------------------------------- /usocksender.php: -------------------------------------------------------------------------------- 1 | \n"; 9 | } else { 10 | fwrite($fp, $request); 11 | while (!feof($fp)) { 12 | echo fgets($fp, 128); 13 | } 14 | fclose($fp); 15 | } 16 | 17 | // 18 | // OR USE stream_socket_client PHP API to controll all data 19 | // set_time_limit(30); 20 | // 21 | // $wait_only = false; 22 | // 23 | // $time_set = time(); 24 | // 25 | // if (!$socket = stream_socket_client("unix://tmp/tmp_socket", $errno, $errstr, 5)) 26 | // { 27 | // die('Socket refused'.PHP_EOL); 28 | // } 29 | // 30 | // $message = $request; 31 | // /* 32 | // if (!isset($socket)) 33 | // { 34 | // echo "$errstr ($errno)
\n"; 35 | // die; 36 | // } 37 | //*/ 38 | // if (!$wait_only && strlen($request) > 0) 39 | // { 40 | // $e = fwrite($socket, $message); 41 | // } 42 | // 43 | // $msg = ""; 44 | // $data = ""; 45 | // 46 | // stream_set_timeout($socket, 2); 47 | // 48 | // 49 | // 50 | // while (1) 51 | // { 52 | // 53 | // 54 | // $sdata = fread($socket, 512); 55 | // if (feof($socket)) 56 | // { 57 | // // It will skip for timeout 58 | // break; 59 | // } 60 | // 61 | // $data = $data.$sdata; 62 | // 63 | // $i = strpos($data, "\n"); 64 | // 65 | // if ($i === false) 66 | // { 67 | // // If timeout has been occured 68 | // 69 | // $time2 = time(); 70 | // $total_time = $time2-$time_set; 71 | // 72 | // if ($total_time > 20) 73 | // { 74 | // die('>>>>>>>>>> TIMEOUT EXCEPTION'); 75 | // } 76 | // 77 | // 78 | // } 79 | // else 80 | // { 81 | // $lstr = substr($data, 0, $i); 82 | // $l = intval($lstr); 83 | // 84 | // $data = substr($data, $i+1); 85 | // 86 | // while (strlen($data) < $l) 87 | // { 88 | // echo "Read: ".strlen($data)." of ".$l."\n"; 89 | // $sdata = fread($socket, 1); 90 | // //echo "SData: ".$sdata." ".$l."\n"; 91 | // if (feof($socket)) 92 | // break; 93 | // $data = $data.$sdata; 94 | // 95 | // } 96 | // break; 97 | // } 98 | // } 99 | // 100 | // fclose($socket); 101 | // 102 | // echo '>>>>>>>>>>> DATA START >>>>>>>>>>>'.PHP_EOL; 103 | // echo $data; 104 | // echo '>>>>>>>>>>> DATA END >>>>>>>>>>>'.PHP_EOL; -------------------------------------------------------------------------------- /usockhandler.php: -------------------------------------------------------------------------------- 1 | >>>>>>>>>>>>>>>>>>>>>>> Socket extension \"sockets\" not loaded.'); 5 | } 6 | 7 | error_reporting(E_ALL); 8 | 9 | set_time_limit(0); 10 | 11 | ob_implicit_flush(); 12 | 13 | $pid = pcntl_fork(); 14 | 15 | $service_address = '/tmp/tmp_socket'; 16 | $service_port = '6002'; 17 | 18 | if (file_exists($service_address)) 19 | { 20 | echo '>>>>>>>>>>>>>>>>>>>>>>>> Temporary socket already in use: '.$service_address . PHP_EOL; 21 | echo '>>>>>>>>>>>>>>>>>>>>>>>> Trying to unlink: '.$service_address . PHP_EOL; 22 | 23 | if (!unlink($service_address)) 24 | { 25 | die('>>>>>>>>>>>>>>>>>>>>>>>> Failed to unlink '.$service_address.' (Permission problem)') . PHP_EOL; 26 | } 27 | 28 | echo('>>>>>>>>>>>>>>>>>>>>>>>> Success unlink '.$service_address) . PHP_EOL; 29 | } 30 | 31 | if ($pid > 0) 32 | { 33 | $status = null; 34 | pcntl_wait($status); 35 | } 36 | else if ($pid == -1) 37 | { 38 | die("Could not fork!" . PHP_EOL); 39 | } 40 | else 41 | { 42 | echo ">>>>>>>>>>>>>>>>>>>>>>>> BEGIN" . PHP_EOL; 43 | 44 | //$fp = stream_socket_client("unix:///usr/tmp/uds_socket", $errno, $errstr, 30); 45 | //$stream_socket = @stream_socket_server("unix:///usr/tmp/uds_socket", $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN) or die("Cannot create socket.\n"); 46 | 47 | $stream_socket = socket_create(AF_UNIX, SOCK_STREAM, 0); 48 | 49 | if (!socket_set_option($stream_socket, SOL_SOCKET, SO_REUSEADDR, 1)) 50 | { 51 | echo '>>>>>>>>>>>>>>>>>>>>>>>> Unable to set option on socket: '. socket_strerror(socket_last_error()) . PHP_EOL; 52 | die; 53 | } 54 | 55 | if (socket_bind($stream_socket, $service_address) === false) 56 | { 57 | die('>>>>>>>>>>>>>>>>>>>>>>>> Unable to bind socket: '. socket_strerror(socket_last_error()) . PHP_EOL); 58 | } 59 | 60 | // if (!socket_listen($stream_socket, 0)) { 61 | // die('>>>>>>>>>>>>>>>>>>>>>>>> Unable to listen: '. socket_strerror(socket_last_error()) . PHP_EOL); 62 | // } 63 | 64 | 65 | 66 | echo ">>>>>>>>>>>>>>>>>>>>>>>> Starting listen" . PHP_EOL; 67 | 68 | while (true) 69 | { 70 | while (socket_listen($stream_socket, 0)) 71 | { 72 | $socket_connection = socket_accept($stream_socket); 73 | 74 | if ($socket_connection) 75 | { 76 | while ($out = socket_read($socket_connection, 2048)) { 77 | echo $out; 78 | socket_close($socket_connection); 79 | break; 80 | } 81 | 82 | } 83 | } 84 | 85 | 86 | //var_dump(socket_accept($stream_socket), gettype(socket_accept($stream_socket))); 87 | echo 'x'; 88 | 89 | 90 | 91 | sleep(1); 92 | 93 | /* 94 | if (socket_accept($stream_socket) !== null) 95 | { 96 | $connection_client = socket_accept($stream_socket); 97 | 98 | if ($connection_client) 99 | { 100 | if (!socket_recv($connection_client, $buf, 2048, MSG_CMSG_CLOEXEC)) 101 | { 102 | //socket_close($stream_socket); 103 | } 104 | else 105 | { 106 | var_dump('x'); 107 | //socket_close($stream_socket); 108 | } 109 | } 110 | } 111 | 112 | socket_close($stream_socket); 113 | */ 114 | 115 | 116 | 117 | 118 | /* 119 | while (){ 120 | echo $buffer; 121 | } 122 | 123 | if (socket_last_error($stream_socket) == 104) { 124 | echo "Connection closed"; 125 | } 126 | * 127 | */ 128 | } 129 | 130 | 131 | 132 | /* 133 | while (true) 134 | { 135 | $socket_accept = socket_accept($stream_socket); 136 | 137 | $data_response = null; 138 | 139 | while (true) 140 | { 141 | if (!$socket_accept) 142 | { 143 | die('>>>>>>>>>>>>>>>>>>>>>>>> Unable to accept socket: '. socket_strerror(socket_last_error()) . PHP_EOL); 144 | } 145 | 146 | echo ">>>>>>>>>>>>>>>>>>>>>>>> Reading" . PHP_EOL; 147 | 148 | $data = socket_read($socket_accept, 10, PHP_BINARY_READ); 149 | 150 | if (strlen($data) > 0) 151 | { 152 | $data_response .= $data; 153 | } 154 | else 155 | { 156 | break; 157 | } 158 | } 159 | } 160 | */ 161 | 162 | //echo $data_response; 163 | 164 | // //fputs(STDOUT, "Waiting for connections...\n"); 165 | // /* 166 | // while (true) 167 | // { 168 | // if (($msgsock = socket_accept($stream_socket)) !== false) 169 | // { 170 | // while (true) 171 | // { 172 | // if (false === ($buf = socket_read($msgsock, 2048))) 173 | // { 174 | // 175 | // } 176 | // 177 | // //$stream_socket_packet = stream_socket_recvfrom($stream_socket, 1, 0, $peer); 178 | // //var_dump($stream_socket_packet); 179 | // sleep(1); 180 | // 181 | // } 182 | // } 183 | // } 184 | // */ 185 | 186 | echo ">>>>>>>>>>>>>>>>>>>>>>>> END" . PHP_EOL; 187 | exit(0); 188 | } 189 | 190 | --------------------------------------------------------------------------------