Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Убить открытый сокет. Как? 
:(
    Опции темы
IZ@TOP
Дата 5.3.2005, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Вот задача небольшая, я сейчас пишу систему синхрониации двух баз данных, система состоит из сервера и клиента. Сервер на РНР, клиент на C# и на Delphi. Проблема в том, что РНР по непонятным мне причинам иногда "сглючивает" и к нему больше нельзя приконнектится, но между тем открытый им порт остается занят. Как бы прибить его, но чтобы без перезагрузки компа?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
En_t_end
Дата 5.3.2005, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



А shutdown пробывал - убивает наглухо все что с сокетом связано и причем мгновено. ? ЗЫ не знаю, как функция в PHP называется.
Но исходя из гомологичности С++ и PHP, скорее всего она так и называется smile

Это сообщение отредактировал(а) En_t_end - 5.3.2005, 10:38
PM MAIL ICQ Skype GTalk Jabber   Вверх
IZ@TOP
Дата 5.3.2005, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Просто не могу понять почему он работает, а соединения не принимает smile Такое впечатление что он повис в ожидании кого-то кто уже давно отконнектился smile Может я чего в коде напутал?

Код

$address = '192.168.1.32';
$port = 50810;

if (!$sock = socket_create (AF_INET, SOCK_STREAM, SOL_TCP)) {
exit;
}

if (!$ret = socket_bind ($sock, $address, $port)) {
  socket_close ($sock);
  exit;
}

if (!$ret = socket_listen ($sock, 1)) {
socket_close ($sock);
exit;
}

do {
   if (!$msgsock = socket_accept($sock)) {
       continue;
   }

   $msg = "Synchronize Service v1.0.1\0";
socket_write($msgsock, $msg, strlen($msg));
   if(!socket_last_error($msgsock)) {

 do {
  if (FALSE === ($buf = socket_read($msgsock, 2048))) {
   break;
  }
  $fh = fopen('log.txt', 'a+');
  fputs($fh, $buf."\r\n");
  fclose($fh);
  switch(trim($buf)) {
   case 'accept': {
    $msg = 'accept your message';
    socket_write($msgsock, $msg, strlen($msg));
    break;
   }
   
   case 'retranslate': {
    $msg = 'translate your data';
    socket_write($msgsock, $msg, strlen($msg));
    break;
   }
   
   case 'exit': {
    $msg = 'bye...';
    socket_write($msgsock, $msg, strlen($msg));
    break;
   }
   
   default: {
    $msg = 'non action';
    socket_write($msgsock, $msg, strlen($msg));
   }
  }

 } while (true);
 
 $msg = '';
    socket_write($msgsock, $msg, strlen($msg));
 socket_close($msgsock);
}

} while (true);


socket_close($sock);

Добавлено @ 11:56
Еще прикол, прога на С# когда коннектится, повисает на чтении... точнее не повисает, а на нем останавливается и ни чего не считывает.

Прошу строго не судить, я с сокетами впервые работаю.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
En_t_end
Дата 5.3.2005, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Цитата
socket_close($sock);

Я тут недавно накопал, что обычный close - закрывает сокет только после пересылке всех данных, то есть у тебя скорее всего такая ситуация : сокет ещё не закрылся и работает(причем, если приемник или передатчик уже закрылся, а этот сокет об этом ещё не знает, он будет его долбить данными, пока не получит ответ об окончании сессии), а ты уже заново открываешь приложение и тестешь, естественно новый сокет не сможет ничего сделать, пока канал не разгрузиться.
PM MAIL ICQ Skype GTalk Jabber   Вверх
Ni@m
Дата 5.3.2005, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 11.3.2004
Где: почти Киев

Репутация: нет
Всего: 6



В PHP есть проблемы с сокетами.
попробуй socket_shutdown.
В 5.02 вроде бы подправили баги, но действительно эта проблема осталась вроде.
По логике сокет должен закрываться, когда завершается выполнение скрипта. Посмотри, завершается ли! Потому как у тебя из цикла не выходит при попытке неудачной записи. Возможно читать он может. То есть он читает пустые строки. Может я не совсем внимательно просмотрел код, но из основного цикла он вообще не выходит smile
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше.
PM MAIL WWW ICQ   Вверх
En_t_end
Дата 5.3.2005, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Ni@m 
Цитата
попробуй socket_shutdown.

Я же говорил, что shutdown надежнее smile
PM MAIL ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0931 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.