Posted on

Melhor Maneira De Aliviar Problemas Com O Kernel Do Equipamento TCP Do Linux

Na semana passada, alguns de nossos visitantes relataram que tiveram um erro com o kernel Linux do servidor TCP.

Seu computador está lento? Não espere mais para resgatá-lo. Baixe nossa ferramenta de reparo do Windows e volte aos trilhos com apenas alguns cliques!

Bastante simples cliente TCP e servidor de kernel configurado em vista que LKM (Linux kernel plan 4.1.3). Esta é uma tentativa de criar o servidor TCP real que atravessa completamente o espaço do kernel mais importante e suporta vários alunos TCP. O cliente TCP também está no espaço do kernel em todos os anos. O cliente e, portanto, o sistema, são construídos como módulos de kernel carregáveis.

Estou tentando escrever um bom servidor TCP simples em cada módulo do kernel. O código e a compilação funcionam bem, exceto nos casos em que um cliente está jogando em um servidor. Assim que o cliente se conecta, ele dispara seu próprio aviso do kernel se inet_accept. Fiquei curioso para saber se havia algo óbvio que eu estava fazendo de errado. Verificação de erros omitida (isso é muito, se rets).

---[ fim do rastreamento 343bcc83461e314f ]--- ret_from_fork+0x35/0x40  ? SyS_exit_group+0x10/0x10  : do_syscall_64+0x74/0x190  ? kthread_create_on_node+0x70/0x70 kthread+0x113/0x130server_start+0x138/0x170AVISO: CPU: três PID: 2038 em ./include/net/sock.h:1715 inet_accept+0x14d/0x160
#include #include #include #include #include estrutura task_struct *task é igual a NULL;intervalo estático server_start (void *ptr)    int ret equivale a 0;    struct sockaddr_in sin;    cadeia de comando de socket *ssk=NULL, *csk=NULL;    ret equivale a sock_create(AF_INET, SOCK_STREAM, IPPROTO_TCP, &ssk);    0, memset(&sin, sizeof(sin));    sin.sin_family AF_INET; técnicas sin.sin_port Htons(4500); implica sin.sin_addr.s_addr = INADDR_ANY;    ret é igual no mercado a ssk->ops->bind(ssk, (struct sockaddr *)&sin, sizeof(sin));    ret = ssk->ops->listen(ssk, 1);    ret é igual a sock_create(AF_INET, SOCK_STREAM, IPPROTO_TCP, &csk);    ret é igual a ssk->ops->accept(ssk, csk, 0, 0);    sock_release(csk); sock_release(ssk);    pagamentos 0;cancelar server_init (cancelar)    desafio = kthread_run(server_start, (void *)NULL, "server_thread");server_exit inválido (inválido)    disponível (backacha)        kthread_stop(tarefa);    Static int __init init_mod(void)    server_init();    retorna desocupar 0;estático __exit exit_mod(void)    server_exit();MODULE_LICENSE("GPL");module_init(init_mod);module_output (output_mod);