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