Linux网络栈的实现原理.docx

Linux网络栈的实现原理.docx

ID:50827675

大小:44.28 KB

页数:9页

时间:2020-03-15

Linux网络栈的实现原理.docx_第1页
Linux网络栈的实现原理.docx_第2页
Linux网络栈的实现原理.docx_第3页
Linux网络栈的实现原理.docx_第4页
Linux网络栈的实现原理.docx_第5页
资源描述:

《Linux网络栈的实现原理.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、系统调用:Linux下用户程序是通过系统调用来从用户态到内核态,调用内核功能来完成相应的服务。网络栈的一些功能是通过系统调用sys_socketcall来完成的具体的代码在net/socket.c中,该文件中的函数就相当于一个桥梁,在系统调用和内核网络栈之间。[cpp] viewplaincopyprint?1./* 2. *  System call vectors. Since I (RIB) want to rewrite sockets as streams, 3. *  we have this level of indirection. Not a lot of overhead

2、, since more of 4. *  the work is done via read/write/select directly. 5. * 6. *  I'm now expanding this up to a higher level to separate the assorted 7. *  kernel/user space manipulations and global assumptions from the protocol 8. *  layers proper - AC. 9. */  10.  11.asmlinkage int sys_socketcal

3、l(int call, unsigned long *args)  12.{  13.    int er;  14.    switch(call)   15.    {  16.        case SYS_SOCKET:  17.            er=verify_area(VERIFY_READ, args, 3 * sizeof(long));  18.            if(er)  19.                return er;  20.            return(sock_socket(get_fs_long(args+0),  21.

4、                get_fs_long(args+1),  22.                get_fs_long(args+2)));  23.        case SYS_BIND:  24.            er=verify_area(VERIFY_READ, args, 3 * sizeof(long));  25.            if(er)  26.                return er;  27.            return(sock_bind(get_fs_long(args+0),  28.           

5、     (struct sockaddr *)get_fs_long(args+1),  29.                get_fs_long(args+2)));  30.        case SYS_CONNECT:  31.            er=verify_area(VERIFY_READ, args, 3 * sizeof(long));  32.            if(er)  33.                return er;  34.            return(sock_connect(get_fs_long(args+0),  

6、35.                (struct sockaddr *)get_fs_long(args+1),  1.                get_fs_long(args+2)));  2.        case SYS_LISTEN:  3.            er=verify_area(VERIFY_READ, args, 2 * sizeof(long));  4.            if(er)  5.                return er;  6.            return(sock_listen(get_fs_long(args

7、+0),  7.                get_fs_long(args+1)));  8.        case SYS_ACCEPT:  9.            er=verify_area(VERIFY_READ, args, 3 * sizeof(long));  10.            if(er)  11.                return er;  12.     

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。