Для небольшого сервера чата, который я делаю, я решил использовать D;Оказавшись на очень аккуратном примере с listener.d, чтобы начать, я решил в значительной степени взять этот пример на себя!Тем не менее, я застрял на ошибке, которую я не могу по-настоящему обернуть пальцем вокруг.Скорее всего, это моя вина, и я делаю что-то не так, но, учитывая, что я взял код из примера, я склонен полагать, что пример не работает.
Я объясню, что происходит:
- Элемент списка
- Я запускаю свой сервер (ничего плохого, он работает так, как должен, и слушает)
- Я телнет к нему.Мой сервер принимает соединение.
- Я использую telnet для отправки некоторой информации.Сервер обрабатывает информацию правильно, опять же, никаких проблем.
- Я выхожу из telnet, используя ^], а затем пишу quit.Разорвать связь довольно неблагодарно.
- Сервер правильно распознает, что это не чистое отключение, и выполняет код для удаления сокета.
- Затем я получаю нарушение диапазона.
Это основной процесс и его цикл: https://github.com/JGBrands/BlaatServer/blob/master/source/bserver.d
Это класс сервера, код, в котором он удаляет сокет, находится в нижней части поля.функция void destroySocket (int index);
https://github.com/JGBrands/BlaatServer/blob/master/source/server.d
На самом деле позвольте мне скопировать и вставить это.: -)
void destroySocket(int index) {
this.reads[index].close(); /* release resources. */
/* Remove the socket now. We don't want this around! It'll crash us! */
if (index != this.reads.length -1)
this.reads[index] = this.reads[this.reads.length -1];
this.reads = this.reads[0 .. this.reads.length -1];
writeln("Total connections: " ~ to!string(this.reads.length));
}
Код в основном взят из примера listener.d, как я уже сказал, я получаю следующую ошибку:
core.exception.RangeError@server(61): Range violation
----------------
----------------
Я верюфункция удаляет что-то, чего не должно быть, для тех, кто заинтересован, это строка 61 в server.d:
if (this.sset.isSet(this.reads[i])) {
Надеюсь, вы, ребята, можете помочь мне разобраться в этом, я упускаю что-то действительно очевидноездесь