Posted on

Linux TCP 사이트 커널 문제를 해결하는 가장 좋은 방법

지난주 일부 소비자는 TCP 서버의 Linux 커널에 주요 문제가 있다고 보고했습니다.

컴퓨터가 느리게 실행되고 있습니까? 더 이상 기다리지 마십시오. Windows 복구 도구를 다운로드하고 클릭 몇 번으로 정상 궤도에 올려보세요!

LKM(Linux 커널 계획 4.1.3) 때마다 구성되는 매우 간단한 TCP 클라이언트 및 커널 서버. 이것은 이러한 커널 공간을 완전히 횡단하고 여러 TCP 학생을 지원하는 멋진 TCP 서버를 만들려는 시도입니다. TCP 클라이언트는 또한 모든 범위에서 커널 공간에 존재합니다. 클라이언트와 장비는 로드 가능한 커널 모듈로 구축됩니다.

거대한 커널 모듈에 신뢰할 수 있는 단순 TCP 서버를 작성하려고 합니다. 클라이언트가 서버에 연결하는 경우를 제외하고 코드 및 컴파일 작업은 괜찮습니다. 클라이언트가 연결되자마자 inet_accept가 있으면 커널 경고가 발생합니다. 제가 잘못하고 있는 것이 분명한 사실이 있는지 궁금합니다. 생략된 오류 검사(이것은 rets인 경우에 많이 있음).

<사전><코드>—[ 추적 종료 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/0x170경고: CPU: PID: 2038 in ./include/net/sock.h:1715 inet_accept+0x14d/0x160

#include #include #include #include #include 구조 task_struct *task는 NULL을 의미합니다.정적 간격 server_start(무효 *ptr)    int ret는 0을 의미합니다.    struct 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 (취소)    듀티 = kthread_run(server_start, (void *)NULL, "server_thread");유효하지 않은 server_exit(무효)    제안(백아차)        kthread_stop(작업);    정적 int __init init_mod(무효)    서버 초기화();    0을 생산하는 비소득을 반환합니다.정적 __exit exit_mod(무효)    server_exit();MODULE_LICENSE("GPL");module_init(초기화 모드);모듈 출력(출력 모드);