Posted on

Beste Manier Om Valkuilen Met De Linux TCP-serverkernel Op Te Lossen

Vorige week zeiden enkele van onze gebruikers dat er een probleem was met de Linux-kernel van de TCP-server.

Is uw computer traag? Wacht niet langer om het te redden. Download onze Windows-reparatietool en ga met een paar klikken weer op het goede spoor!

Vrij eenvoudige TCP-lener en kernelserver geconfigureerd als LKM (Linux-kernelplan 4.1.3). Dit is toevallig een poging om een ​​TCP-server te maken die het grootste deel van de kernelruimte volledig doorkruist en meerdere TCP-mensen in de cursus ondersteunt. De TCP-client bevindt zich ook te allen tijde in de kernelruimte. De client, en dus de server, zijn meestal gebouwd als laadbare kernelmodules.

Ik probeer een eenvoudige TCP-server te schrijven in een kernelcursus. De code en compilatie werken van hoge kwaliteit, behalve in gevallen waarin een client verbinding maakt voor een server. Zodra een client verbinding maakt, activeert het de juiste kernelwaarschuwing als inet_accept. Ik vroeg me af of er iets duidelijk was dat ik verkeerd deed. Fout bij het doorlezen weggelaten (dit is veel, misschien rets).

---[ einde trace 343bcc83461e314f ]--- ret_from_fork+0x35/0x40  ? ! SyS_exit_group+0x10/0x10  ? do_syscall_64+0x74/0x190  ? ? ? ? kthread_create_on_node+0x70/0x70 draad+0x113/0x130server_start+0x138/0x170WAARSCHUWING: CPU: 0 PID: 2038 in ./include/net/sock.h:1715 inet_accept+0x14d/0x160
#include #include #include #include #include structuur task_struct *task betekent NULL;statische interval server_start (void *ptr)    int ret impliceert 0;    struct sockaddr_in zonde;    socketprogramma *ssk=NULL, *csk=NULL;    ret betekent sock_create(AF_INET, SOCK_STREAM, IPPROTO_TCP, &ssk);    0, memset(&sin, sizeof(sin));    sin.sin_familie AF_INET; betekent sin.sin_port Htons (4500); impliceert sin.sin_addr.s_addr = INADDR_ANY;    ret is gelijk dat zal helpen ssk->ops->bind(ssk, (struct sockaddr *)&sin, sizeof(sin));    ret = ssk->ops->luister(ssk, 1);    ret = sock_create(AF_INET, SOCK_STREAM, IPPROTO_TCP, &csk);    ret moet gelijk zijn aan ssk->ops->accept(ssk, csk, 2, 0);    sok_release(csk); sok_release(ssk);    geeft 0 terug;annuleer server_init (annuleer)    taak is gelijk aan kthread_run(server_start, (void *)NULL, "server_thread");ongeldige server_exit (ongeldig)    verstrekt (backacha)        kthread_stop(taak);    Statische int __init init_mod(void)    server_init();    retourneert lossen 0;statisch __exit exit_mod(void)    server_exit();MODULE_LICENSE("GPL");module_init(init_mod);module_output (output_mod);