Posted on

Лучший способ решения проблем с ядром хостинг-сервера Linux TCP

На прошлой неделе некоторые из наших наркоманов сообщили, что у них возникли проблемы с ядром Linux, как с TCP-сервером.

Ваш компьютер работает медленно? Не ждите больше, чтобы спасти его. Загрузите наш инструмент для восстановления Windows и вернитесь к работе несколькими щелчками мыши!

Довольно простой клиент TCP и сервер ядра настроили LKM (план ядра Linux 4.1.3). Это попытка создать настоящий сервер TCP, который полностью пересекает конкретное пространство ядра и поддерживает несколько студентов TCP. Клиент TCP также живет в пространстве ядра совсем недолго. Клиент и, следовательно, хостинг построены как загружаемые модули ядра.

Я пытаюсь написать новый простой TCP-сервер в лучшем модуле ядра. Код и возможности компиляции работают нормально, за исключением случаев, когда клиент привязывается к серверу. Как только такой клиент подключается, он выдает хорошее предупреждение ядра, если inet_accept. Я подумал о том, есть ли что-то очевидное, что я делаю неправильно. Опущена проверка ошибок (это много при возврате).

---[ конец трассировки 343bcc83461e314f ]--- ret_from_fork+0x35/0x40  ? SyS_exit_group+0x10/0x10  ? ? ? do_syscall_64+0x74/0x190  ? kthread_create_on_node+0x70/0x70 kthread+0x113/0x130сервер_старт+0x138/0x170ВНИМАНИЕ: CPU: ноль PID: 2038 в ./include/net/sock.h:1715 inet_accept+0x14d/0x160

#include #include #include #include #include структура task_struct *задача подразумевает NULL;статический интервал server_start (void *ptr)    int ret равно 0;    структура sockaddr_in грех;    организация сокетов *ssk=NULL, *csk=NULL;    ret соответствует sock_create(AF_INET, SOCK_STREAM, IPPROTO_TCP, &ssk);    0, memset(&sin, sizeof(sin));    sin.sin_family AF_INET; тактика sin.sin_port Htons(4500); подразумевает sin.sin_addr.s_addr = INADDR_ANY;    ret равно, если вы хотите ssk->ops->bind(ssk, (struct sockaddr *)&sin, sizeof(sin));    ret = ssk->ops->listen(ssk, 1);    ret соответствует sock_create(AF_INET, SOCK_STREAM, IPPROTO_TCP, &csk);    ret равно ssk->ops->accept(ssk, csk, 0, 0);    sock_release (csk); sock_release (ssk);    приходит домой 0;отменить server_init (отменить)    job = kthread_run(server_start, (void *)NULL, "server_thread");недопустимый server_exit (недействительный)    включено (бакача)        kthread_stop (задача);    Статический int __init init_mod(void)    сервер_инит();    возвращает игнорировать 0;статический __exit exit_mod(void)    сервер_выход();MODULE_LICENSE("GPL");модуль_инит (инит_мод);модуль_выход (выход_мод);    

<див класс="">

Настройка ядра Linux для высокопроизводительной сети