Linux内核网络问题,各位大牛一定要进来看一下
Linux内核版本2.6.18
socket函数的系统调用函数如下:
我在其中对发送的数据和接收的数据试图进行输出操作,如带有注释的两行代码所示。结果是,可以输出发送数据,但是无法输出接收的数据(是直接没有输出任何的数据,不是输出乱码)。
C/C++ code
各位大牛,给点看法,思路。在此先谢过了!
socket函数的系统调用函数如下:
我在其中对发送的数据和接收的数据试图进行输出操作,如带有注释的两行代码所示。结果是,可以输出发送数据,但是无法输出接收的数据(是直接没有输出任何的数据,不是输出乱码)。
C/C++ code
asmlinkage long sys_socketcall(int call, unsigned long __user *args) { unsigned long a[6]; unsigned long a0, a1; int err; if (call < 1 || call > SYS_RECVMSG) return -EINVAL; /* copy_from_user should be SMP safe. */ if (copy_from_user(a, args, nargs[call])) return -EFAULT; err = audit_socketcall(nargs[call] / sizeof(unsigned long), a); if (err) return err; a0 = a[0]; a1 = a[1]; switch (call) { case SYS_SOCKET: err = sys_socket(a0, a1, a[2]); break; case SYS_BIND: err = sys_bind(a0, (struct sockaddr __user *)a1, a[2]); break; case SYS_CONNECT: err = sys_connect(a0, (struct sockaddr __user *)a1, a[2]); break; case SYS_LISTEN: err = sys_listen(a0, a1); break; case SYS_ACCEPT: err = sys_accept(a0, (struct sockaddr __user *)a1, (int __user *)a[2]); break; case SYS_GETSOCKNAME: err = sys_getsockname(a0, (struct sockaddr __user *)a1, (int __user *)a[2]); break; case SYS_GETPEERNAME: err = sys_getpeername(a0, (struct sockaddr __user *)a1, (int __user *)a[2]); break; case SYS_SOCKETPAIR: err = sys_socketpair(a0, a1, a[2], (int __user *)a[3]); break; case SYS_SEND: err = sys_send(a0, (void __user *)a1, a[2], a[3]); break; case SYS_SENDTO: printk("sendto a1=%s\n",(char *)a1);//a1是指向要发送的用户数据的指针,可以输出 err = sys_sendto(a0, (void __user *)a1, a[2], a[3], (struct sockaddr __user *)a[4], a[5]); break; case SYS_RECV: err = sys_recv(a0, (void __user *)a1, a[2], a[3]); break; case SYS_RECVFROM: printk("sendto a1=%s\n",(char *)a1);//a1是指向要接收的用户数据的指针,不能输出??? err = sys_recvfrom(a0, (void __user *)a1, a[2], a[3], (struct sockaddr __user *)a[4], (int __user *)a[5]); break;
各位大牛,给点看法,思路。在此先谢过了!
作者: lanyang123456 发布时间: 2011-05-29
你加的printk,udp收的时候不打印?
作者: ww2000e 发布时间: 2011-05-29