Георгий |
Отправлено: 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 не дойдёт до нормально установленных соединений?
и об отвалившихся "по тихому" клиентах — факт их отвала устанавливать по времени последнего обмена с ними? т.е. с каждым клиентом ассоциировать время, которое обновлять при каждом цикле успешного обмена и как только слишком долго не будет запросов отрубать его? |
|