Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2014, 16:42   #1
bionicle12
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 10
По умолчанию Фильтр пакетов на сокет

Добрый день, подскажите пожалуйста, как можно реализовать фильтрацию пакетов на открытый сокет.

Есть клиент-сервер, когда надо, клиент отключается, оставляя открытым сокет, однако сервер продолжает слать на него пакет, не получая ответа, в итоге жрет память и падает.
Могу отправить пакет, а как сказать ему: "ээ парень нет, вот этот пакет не шли".

Я не особо эксперт по си, читаю все подряд по сокетам, но там больше про то как слать пакеты, а не как запрещать их слать
bionicle12 вне форума Ответить с цитированием
Старый 06.08.2014, 17:14   #2
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

1. Как приложение закрывается, но сокет остается открытым?
2. Зачем слать пакеты на сокет, который не должен принимать пакеты? (организуй сообщения от клиента "я (не) готов принимать" и отсылай только тем, кто готов / либо просто закрывай сокет).
alextrof94$gmail.com

Последний раз редактировалось alextrof94; 06.08.2014 в 17:29.
alextrof94 вне форума Ответить с цитированием
Старый 06.08.2014, 17:31   #3
bionicle12
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 10
По умолчанию

Сокет не закрывается, визуально клиент остается на месте и выполняет пару функций, включая свое присутствие, но по факту клиент отваливается и отвечать серверу уже некому.

Изменения вносить могу только со стороны сервера, клиент изменить пока проблематично =( Может можно при отключении ставить маркер и по нему уже фильтровать, если 1, то не слать? Просто сервер постоянно шлет пакет один и тот же и как его остановить я не знаю, да и вреда будет больше, если он его слать перестанет. Может есть какие команды для прерывания постоянной отправки пакетов на сокет, в си?) Или асм копать, с ним правда еще больше головняка для меня)

Последний раз редактировалось bionicle12; 06.08.2014 в 17:34.
bionicle12 вне форума Ответить с цитированием
Старый 06.08.2014, 17:36   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
по факту клиент отваливается и отвечать серверу уже некому.
UDP?
Если ТСР то программа по идее должна при отвале сокета получить исключение.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.08.2014, 17:55   #5
bionicle12
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 10
По умолчанию

ТСР, тут до меня пара хуков сделана, из-за которых это все и продолжает работать, хоть и криво). ... Вообще думаю смысл какой от фильтра пакетов, на сокет, где никого нет. Пакеты от сервера так и будут ведь слаться-копиться, проблема останется... Может написать при получении пакета, автоматический ответ серверу, мол все ок... Наверное все равно асм надо будет, Я что-то даже в реализации запутался )
bionicle12 вне форума Ответить с цитированием
Старый 06.08.2014, 19:00   #6
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Глупо изменять серверную часть, при этом не имея доступа к клиентской части... И что, этот "маркер" будешь в ручную менять?
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 06.08.2014, 19:27   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Я что-то даже в реализации запутался )
Что-то я не понимаю в чем проблема?
Сервер посылает данные. Они не доходят и генерируется исключение. Ну и ради бога - формируешь сопроцесс, в котором удаленный хост пингуется неким образом. Как только пинг проходит сопроцесс пробует посылать данные снова. Если у тебя утечка памяти, значит сервак нужно СРОЧНО переделывать. Причем кардинально менять механизм.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.08.2014, 15:53   #8
bionicle12
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 10
По умолчанию

По хорошему да, его бы полностью переписать, а то он со времен мамонтов, но это не быстрое решение =( Может посоветуете пару статей для более скорого освоения данного ремесла?
bionicle12 вне форума Ответить с цитированием
Старый 07.08.2014, 16:25   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Та любую подборку по winsocks.
У тебя какой компиль?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.08.2014, 19:32   #10
bionicle12
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 10
По умолчанию

Встроенный в visual studio 2013
bionicle12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HTTP-фильтр пакетов, искать application/json grib_aga Фриланс 2 13.08.2013 08:50
Сокет останавливает другой сокет. batand C/C++ Сетевое программирование 2 09.10.2012 11:58
Вопрос по WinSock: "сокет=сокет." Ksardas13 C/C++ Сетевое программирование 2 27.11.2011 16:12
Фильтр пакетов Stolen Общие вопросы Delphi 0 07.02.2009 09:38