Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Остановка сервера 
:(
    Опции темы
zss
Дата 14.7.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сервер создает сокет. Биндится и слушает его.
Останавливаю сервер вызывая closesocket.

Но пот при запуске его повторно вываливается с ошибкой о том, что в системе разрешено одно использование адрес/порт.

Получается что closesocket не закрывает выделенные ресурсы ?
PM MAIL ICQ   Вверх
GoldFinch
Дата 14.7.2009, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 1
Всего: 26



Код

void WinNetwork::Disconnect()
{
    ::shutdown(s, SD_BOTH);
    ::closesocket(s);
    connected = false;
}

PM MAIL ICQ   Вверх
zss
Дата 14.7.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(GoldFinch @  14.7.2009,  23:14 Найти цитируемый пост)
void WinNetwork::Disconnect()
{
    ::shutdown(s, SD_BOTH);
    ::closesocket(s);
    connected = false;
}

делал и shutdown и closesocket - нифига :(
PM MAIL ICQ   Вверх
dumb
Дата 14.7.2009, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 1
Всего: 158



в разделе C/C++: Сети(где и следовало создавать данный топик) вроде недавно обсуждался этот вопрос. если кратко: порт не всегда освобождается моментально. посему либо ждать, либо SO_REUSEADDR.

GoldFinch, TIME_WAIT shutdown'ом не задушишь.
PM MAIL   Вверх
zss
Дата 14.7.2009, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(dumb @  14.7.2009,  23:24 Найти цитируемый пост)
в разделе C/C++: Сети(где и следовало создавать данный топик) вроде недавно обсуждался этот вопрос

не совсем конкретный линк smile


Цитата(dumb @  14.7.2009,  23:24 Найти цитируемый пост)
если кратко: порт не всегда освобождается моментально. посему либо ждать

сколько ? 2 часа ?


Цитата(dumb @  14.7.2009,  23:24 Найти цитируемый пост)
либо SO_REUSEADDR

почитаю. А если вкратце - что это за зверь и что дает ?

Добавлено через 14 минут и 46 секунд
Цитата(zss @  14.7.2009,  23:30 Найти цитируемый пост)
почитаю. 

не помогло :(
PM MAIL ICQ   Вверх
azesmcar
Дата 15.7.2009, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 3
Всего: 211



zss

Даже если не закрывать сокет виндоуз его прибьет через некоторые время. Минут через 5 уже порт должен освободиться.
Попробуй закрывать все сокеты, которые подсойденены к твоему серверу, а потом закрывать слушающий.
PM   Вверх
zss
Дата 15.7.2009, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(azesmcar @  15.7.2009,  06:57 Найти цитируемый пост)
Даже если не закрывать сокет виндоуз его прибьет через некоторые время. Минут через 5 уже порт должен освободиться.
Попробуй закрывать все сокеты, которые подсойденены к твоему серверу, а потом закрывать слушающий. 

пробовал - тот же эффект.

Причем это происходит только тогда, когда были активные подключения. То есть если есть подключение и я останавливаю сервер (закрываю все подключения и слушающий сокет), то при повторном запуске bind не срабатывает.


Цитата(azesmcar @  15.7.2009,  06:57 Найти цитируемый пост)
Минут через 5 уже порт должен освободиться

мне нельзя так долго ждать smile
PM MAIL ICQ   Вверх
azesmcar
Дата 15.7.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 3
Всего: 211



Цитата(zss @  15.7.2009,  11:19 Найти цитируемый пост)
мне нельзя так долго ждать smile 

Ну это я с болшим запасом сказал.

Кстати, а ты уверен что вызов срабатывает?
Ошибок не возвращает? Проверь на SOCKET_ERROR и если ошибка есть, посмотри значение GetLastError().
PM   Вверх
zss
Дата 15.7.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(azesmcar @  15.7.2009,  12:46 Найти цитируемый пост)
Кстати, а ты уверен что вызов срабатывает?

какой вызов ?
PM MAIL ICQ   Вверх
azesmcar
Дата 15.7.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 3
Всего: 211



Цитата(zss @  15.7.2009,  13:19 Найти цитируемый пост)
какой вызов ? 

вызов closesocket.
PM   Вверх
zss
Дата 15.7.2009, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(azesmcar @  15.7.2009,  13:20 Найти цитируемый пост)
вызов closesocket. 

вызов closesocket отрабатывает и на клиента и на слушающий сокет.

Но вот shutdown на слушающий сокет говорит
Код

Запрос на отправку или получение данных (when sending on a datagram socket using a sendto call) no address was supplied.

PM MAIL ICQ   Вверх
MAKCim
Дата 16.7.2009, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(zss @  14.7.2009,  23:30 Найти цитируемый пост)
почитаю. А если вкратце - что это за зверь и что дает ?

Цитата

SO_REUSEADDR
              Indicates that the rules used in validating addresses supplied in a bind(2) call should allow reuse of local  addresses.   For  PF_INET
              sockets  this  means  that a socket may bind, except when there is an active listening socket bound to the address.  When the listening
              socket is bound to INADDR_ANY with a specific port then it is not possible to bind to this port for any local address.  Argument is  an
              integer boolean flag.




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
zss
Дата 16.7.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



MAKCim, нифига не помогла данная опция :(
PM MAIL ICQ   Вверх
MAKCim
Дата 16.7.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



zss, 
тогда код в студию


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
zss
Дата 16.7.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(MAKCim @  16.7.2009,  17:03 Найти цитируемый пост)
тогда код в студию 

проблема решена - нужно выставлять опции до bind
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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