Заказ закрыт
Корректировка кода серверной программы C++ кода

Бюджет: по договоренности
Здравствуйте.
Имеется программа на С++ (сервер).
Вчера произошел сбой в датацентре где размещаю сервер.
Был перебой со связью, поддержка сообщила что была DDOS атака.
Вернее было 2 атаки. Первую побороли уже через 15 минут, со второй справились за 5 минут.
Причем после второй атаки программа перестала принимать соединения (функция accept), даже не смотря на восстановление связи.
У нас запущено несколько экземпляров приложения, "зависло" только одно. NGINX тоже восстановился корректно.

Поддержка так же сообщила, что фильтровали трафик методом "молчаливого" сброса пакетов без icmp-ответов о недоступности (наиболее похоже на вчерашнюю ситуацию).

Код ниже.

НУЖНО СЭМУЛИРОВАТЬ ВЧЕРАШНЮЮ СИТУАЦИЮ, и НАЙТИ РЕШЕНИЕ (поправить код)


int sockfd, newsockfd, on=1;
socklen_t clilen;
struct sockaddr_in serv_addr, cli_addr;
int pid;

/* First call to socket() function */
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) 
{
perror("ERROR opening socket");
exit(1);
}
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char *)&on, sizeof(on));
/* Initialize socket structure */
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(port);

debug(log_file, debug_level, 5, "~ Bind port %dn", port);

/* Now bind the host address using bind() call.*/
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
{
debug(log_file, debug_level, 0, "~ Error on binding port %dn", port);
perror("ERROR on binding");
exit(1);
}
/* Now start listening for the clients, here 
* process will go in sleep mode and will wait 
* for the incoming connection
*/
listen(sockfd,5);
clilen = sizeof(cli_addr);
while (keepalive) 
{
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0)
{
perror("ERROR on accept");
debug(log_file, debug_level, 0, "~ Error on accept (%s)n", port);
continue;
// exit(1);
}

              }
Опубликован 18.12.2015 в 17:50
Заказ находится в архиве

Выберите способ верификации:

Обновите страницу после прохождения верификации.