fork download
  1. <?php
  2.  
  3. $address = '127.0.0.1';
  4. $port = 1337;
  5.  
  6. $sock = socketInit($address, $port);
  7.  
  8. do {
  9. if (($msgsock = socket_accept($sock)) === false) {
  10. echo "Не удалось выполнить socket_accept(): причина: " . socket_strerror(socket_last_error($sock)) . "\n";
  11. break;
  12. }
  13.  
  14. socketWrite($msgsock, "Welcome\r\n\r\n");
  15.  
  16. $buf = '';
  17.  
  18. foreach (readSocket($msgsock) as $buffer) {
  19. $buf .= $buffer;
  20. }
  21.  
  22. socketWrite($msgsock, $buf);
  23.  
  24. socket_close($msgsock);
  25. } while (true);
  26.  
  27. socket_close($sock);
  28.  
  29. function socketWrite($msgsock, $buffer) {
  30. $length = strlen($buffer);
  31.  
  32. while ($bytesSent = socket_write($msgsock, $buffer)) {
  33. if ($bytesSent == $length) {
  34. echo "all bytes have been sent \n";
  35. break;
  36. } else {
  37. $buffer = substr($buffer, $bytesSent);
  38. }
  39. }
  40.  
  41. if ($bytesSent === false) {
  42. echo "Не удалось записать данные в сокет, причина:" . socket_strerror(socket_last_error());
  43. socket_close($msgsock);
  44. }
  45. }
  46.  
  47. function socketInit($address, $port) {
  48. if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
  49. echo "Не удалось создать сокет, причина: " . socket_strerror(socket_last_error()) . "\n";
  50. die;
  51. }
  52.  
  53. if (socket_bind($sock, $address, $port) === false) {
  54. echo "Не удалось привязать сокет к адрресу, причина: " . socket_strerror(socket_last_error()) . "\n";
  55. die;
  56. }
  57.  
  58. if (socket_listen($sock, 5) === false) {
  59. echo "Не удалось выполнить socket_listen(): причина: " . socket_strerror(socket_last_error($sock)) . "\n";
  60. die;
  61. }
  62.  
  63. return $sock;
  64. }
  65.  
  66. function readSocket($msgsock) {
  67. do {
  68. if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
  69. echo "не удалось прочитать сокет, причина: " . socket_strerror(socket_last_error($msgsock));
  70. break;
  71. }
  72.  
  73. $buf = trim($buf);
  74.  
  75. if ($buf == "") {
  76. break;
  77. }
  78.  
  79. yield $buf;
  80.  
  81. if (preg_match('/\n/', $buf)) {
  82. break;
  83. }
  84.  
  85. } while (true);
  86. }
Time limit exceeded #stdin #stdout 5s 61648KB
stdin
Standard input is empty
stdout
Standard output is empty