shutdown.phpt 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. --TEST--
  2. stream_socket_shutdown() test on IPv4 TCP Loopback
  3. --SKIPIF--
  4. <?php
  5. function_exists('stream_socket_shutdown') or die('skip stream_socket_shutdown() is not supported.');
  6. ?>
  7. --FILE--
  8. <?php
  9. for ($i=0; $i<100; $i++) {
  10. $port = rand(10000, 65000);
  11. /* Setup socket server */
  12. $server = @stream_socket_server("tcp://127.0.0.1:$port");
  13. if ($server) {
  14. break;
  15. }
  16. }
  17. if (!$server) {
  18. die('Unable to create AF_INET socket [server]');
  19. }
  20. /* Connect and send request 1 */
  21. $client1 = stream_socket_client("tcp://127.0.0.1:$port");
  22. if (!$client1) {
  23. die('Unable to create AF_INET socket [client]');
  24. }
  25. @fwrite($client1, "Client 1\n");
  26. stream_socket_shutdown($client1, STREAM_SHUT_WR);
  27. @fwrite($client1, "Error 1\n");
  28. /* Connect and send request 2 */
  29. $client2 = stream_socket_client("tcp://127.0.0.1:$port");
  30. if (!$client2) {
  31. die('Unable to create AF_INET socket [client]');
  32. }
  33. @fwrite($client2, "Client 2\n");
  34. stream_socket_shutdown($client2, STREAM_SHUT_WR);
  35. @fwrite($client2, "Error 2\n");
  36. /* Accept connection 1 */
  37. $socket = stream_socket_accept($server);
  38. if (!$socket) {
  39. die('Unable to accept connection');
  40. }
  41. @fwrite($socket, fgets($socket));
  42. @fwrite($socket, fgets($socket));
  43. fclose($socket);
  44. /* Read Response 1 */
  45. echo fgets($client1);
  46. echo fgets($client1);
  47. /* Accept connection 2 */
  48. $socket = stream_socket_accept($server);
  49. if (!$socket) {
  50. die('Unable to accept connection');
  51. }
  52. @fwrite($socket, fgets($socket));
  53. @fwrite($socket, fgets($socket));
  54. fclose($socket);
  55. /* Read Response 2 */
  56. echo fgets($client2);
  57. echo fgets($client2);
  58. fclose($client1);
  59. fclose($client2);
  60. fclose($server);
  61. ?>
  62. --EXPECT--
  63. Client 1
  64. Client 2