@@ -120,6 +120,19 @@ void awh::CoreClient::event(struct bufferevent * bev, const short events, void *
120
120
if (wrk->connectProxyFn != nullptr ) wrk->connectProxyFn (adj->aid , const_cast <core_t *> (wrk->core ), wrk->ctx );
121
121
// Выполняем функцию обратного вызова
122
122
} else if (wrk->connectFn != nullptr ) wrk->connectFn (adj->aid , const_cast <core_t *> (wrk->core ), wrk->ctx );
123
+ // Если флаг ожидания входящих сообщений, активирован
124
+ if (wrk->wait ){
125
+ // Устанавливаем таймаут ожидания поступления данных
126
+ struct timeval read = {adj->timeRead , 0 };
127
+ // Устанавливаем таймаут ожидания записи данных
128
+ struct timeval write = {adj->timeWrite , 0 };
129
+ // Устанавливаем таймаут на отправку/получение данных
130
+ bufferevent_set_timeouts (
131
+ adj->bev ,
132
+ (adj->timeRead > 0 ? &read : nullptr ),
133
+ (adj->timeWrite > 0 ? &write : nullptr )
134
+ );
135
+ }
123
136
// Если это ошибка или завершение работы
124
137
} else if (events & (BEV_EVENT_ERROR | BEV_EVENT_EOF | BEV_EVENT_TIMEOUT)) {
125
138
// Если это ошибка
@@ -128,6 +141,8 @@ void awh::CoreClient::event(struct bufferevent * bev, const short events, void *
128
141
adj->log ->print (" closing server [%s:%d] %s" , log_t ::flag_t ::WARNING, host.c_str (), url.port , evutil_socket_error_to_string (EVUTIL_SOCKET_ERROR ()));
129
142
// Если - это таймаут, выводим сообщение в лог
130
143
else if (events & BEV_EVENT_TIMEOUT) adj->log ->print (" timeout server [%s:%d]" , log_t ::flag_t ::WARNING, host.c_str (), url.port );
144
+ // Запрещаем чтение запись данных серверу
145
+ bufferevent_disable (bev, EV_WRITE | EV_READ);
131
146
// Выполняем отключение от сервера
132
147
const_cast <core_t *> (wrk->core )->close (adj->aid );
133
148
}
@@ -279,15 +294,6 @@ void awh::CoreClient::tuning(const size_t aid) noexcept {
279
294
bufferevent_setcb (it->second ->bev , &read , &write , &event, (void *) it->second );
280
295
// Очищаем буферы событий при завершении работы
281
296
bufferevent_flush (it->second ->bev , EV_READ | EV_WRITE, BEV_FINISHED);
282
- // Если флаг ожидания входящих сообщений, активирован
283
- if (wrk->wait ){
284
- // Устанавливаем таймаут ожидания поступления данных
285
- struct timeval read = {it->second ->timeRead , 0 };
286
- // Устанавливаем таймаут ожидания записи данных
287
- struct timeval write = {it->second ->timeWrite , 0 };
288
- // Устанавливаем таймаут получения данных
289
- bufferevent_set_timeouts (it->second ->bev , &read , &write );
290
- }
291
297
/* *
292
298
* Водяной знак на N байт (чтобы считывать данные когда они действительно приходят)
293
299
*/
@@ -401,6 +407,10 @@ void awh::CoreClient::close(const size_t aid) noexcept {
401
407
// Устанавливаем что событие удалено
402
408
const_cast <worker_t ::adj_t *> (it->second )->bev = nullptr ;
403
409
}
410
+ // Если прокси-сервер активирован но уже переключён на работу с сервером
411
+ if ((wrk->proxy .type != proxy_t ::type_t ::NONE) && !wrk->isProxy ())
412
+ // Выполняем переключение обратно на прокси-сервер
413
+ wrk->switchConnect ();
404
414
// Выполняем удаление контекста SSL
405
415
this ->ssl ->clear (wrk->ssl );
406
416
// Удаляем адъютанта из списка адъютантов
0 commit comments