C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
сервер TCP/IP, и нежелательные связи
Георгий
Отправлено: 23.10.2004, 20:13


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



пишу свой первый простенький сервер работающий по TCP/IP и есть вопрос:
что делать, когда больше соединений устанавливать не хочется?
закрыть сокет? а потом, когда кто то отсоединится снова socket, bind и listen?
или есть более гуманный способ?
Konstantine
Отправлено: 25.10.2004, 09:12


Мастер участка

Группа: Модератор
Сообщений: 545



QUOTE (Георгий @ 23/10/2004, 21:15)
что делать, когда больше соединений устанавливать не хочется?

а скоко ты соединяешь? что юольше не лезет?
Георгий
Отправлено: 25.10.2004, 09:38


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



имеется ввиду устанавливать не больше заданного — например обслуживать не больше 5ти клиентов, а остальным давать отказ.
Konstantine
Отправлено: 25.10.2004, 09:48


Мастер участка

Группа: Модератор
Сообщений: 545



ааа, ну проверяй в обработчике OnConnecting и не давай соединится
Георгий
Отправлено: 25.10.2004, 10:11


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



а если с использованием только WinSock ?
т.е. bind, listen, socket, accept, read, write, close.
AVC
Отправлено: 25.10.2004, 10:54


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE
а если с использованием только WinSock ?
т.е. bind, listen, socket, accept, read, write, close.

socet'ам плевать сколько сейчас есть соединения — т.е. ограничивать до 5 только программно.
Konstantine
Отправлено: 25.10.2004, 13:37


Мастер участка

Группа: Модератор
Сообщений: 545



когда приходит сообщение Accept-а то закрывай созданный сокет (отрубай токо одного клиента — последнего)
Георгий
Отправлено: 25.10.2004, 23:25


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



сначала написал:[quote]пробовал, но как то странно в этом случае получается — клиент записывает данные без ошибок, но чтения отклика не происходит (ещё бы — ведь соединение закрыто).[/qoute]но потом начал перепроверять, нашёл логические ошибки и оно заработало. спасибо.

кстати, не подскажите чем хороша модель т.н. fork серверов? а то мне очень понравился вариант работы через select, без всяких fork и многопоточности.

и ещё от DOS как защититься? а то select похоже выбирает первый FD по которому идёт запрос и, при некоторой частоте запросов на установление соединения, может получиться, что select не дойдёт до нормально установленных соединений?

и об отвалившихся "по тихому" клиентах — факт их отвала устанавливать по времени последнего обмена с ними? т.е. с каждым клиентом ассоциировать время, которое обновлять при каждом цикле успешного обмена и как только слишком долго не будет запросов отрубать его?

Вернуться в Вопросы программирования в C++Builder