Сделано в Раскрутке

Архив эхоконференции RU.PHP

- RU.PHP ------------------------------------------------------------- RU.PHP -
 Msg  : #9044 [872]
 От   : Andrew Korovin                2:5020/845          18 июня 04, 17:44
 Кому : All                                               18 июня 04, 21:09
 Тема : Сокеты и иже с ними...
-------------------------------------------------------------------------------
* Originally in ru.php
* Crossposted in fluid.local
Hемедленно нажми на RESET, All!

Есть скрипт на PHP. После запуска он устанавливает соединение с двумя серверами
(через socket_create/socket_connect) и пересылает между ними данные.

Сразу после соединения на одном из серверов (прога на Си под FreeBSD)
выскакивает сообщение "recv() failed: Connection reset by peer".
ИМХО, скрипт просто выходит, ничего не пересылая. Что я делаю не так?

Вот сам скрипт:
=== Cut ===
 0)
    {
      $written = socket_write($to, $str, $len);
      if ($written === FALSE)
        return FALSE;
      $temp = "";
      for ($i = $len - $written; $i < $len; $i++)
        $temp .= $str[$i];
      $len -= $written;
      $str = $temp;
    }
  }
  return TRUE;
}

// Эти параметры передаются через запрос:
// $host -- один из хостов, к которому мы коннектимся (вида www.microsoft.com)
// $port -- порт на хосте $host
// $cb_port -- порт на втором хосте

$address = gethostbyname($host);

$ssock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($ssock < 0) die;
$result = socket_connect($ssock, $address, $port);
if ($result < 0) die;
$result = socket_set_nonblock($ssock);
if (!$result) die;
$csock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($csock < 0) die;
$result = socket_connect($csock, "10.20.201.7", $cb_port);
if ($result < 0) die;
$result = socket_set_nonblock($csock);
if (!$result) die;

while (1)
{
  if (!transfer($ssock, $csock))
    break;
  if (!transfer($csock, $ssock))
    break;
}

socket_close($ssock);
socket_close($csock);

?>
=== Cut ===



С уважением, Andrew                           18 Jun 04 года
... XMMS: Dropped :[
--- Reset - не кнопка, а горькая небходимость.
 * Origin: :: FreeSide Mail Server :: Powered by FreeBSD :: (2:5020/845)


При переходе по баннеру - скидка 25% на первый месяц обслуживания!
Самый простой способ получить ROOT-доступ
При переходе по баннеру - скидка 25% на первый месяц обслуживания!