网络套接字入口函数
//所有的网络套接字系统调用函数(socket bind listen connect )都使用一个共同的入口函数:sys_socketcall
/*
第一个参数call表示被调用的应用层接口函数,第二个参数是一个指针,指向具体被调用函数(如accept函数)所需要的参数。
这些在用户系统调用时传入的参数将原封不动地传递给内核网络栈相关底层函数使用
*/
asmlinkage int sys_socketcall(int call, unsigned long *args)
int er;
switch(call)
{
case SYS_SOCKET:
er=verify_area(VERIFY_READ, args, 3 * sizeof(long));
if(er)
return er;
return(sock_socket(get_fs_long(args+0),
get_fs_long(args+1),
get_fs_long(args+2)));
case SYS_BIND:
er=verify_area(VERIFY_READ, args, 3 * sizeof(long));
if(er)
return er;
return(sock_bind(get_fs_long(args+0),
(struct sockaddr *)get_fs_long(args+1),
get_fs_long(args+2)));
case SYS_CONNECT:
er=verify_area(VERIFY_READ, args, 3 * sizeof(long));
if(er)
return er;
return(sock_connect(get_fs_long(args+0),
(struct sockaddr *)get_fs_long(args+1),
get_fs_long(args+2)));
case SYS_LISTEN:
er=verify_area(VERIFY_READ, args, 2 * sizeof(long));
if(er)
return er;
return(sock_listen(get_fs_long(args+0),
get_fs_long(args+1)));
case SYS_ACCEPT:
er=verify_area(VERIFY_READ, args, 3 * sizeof(long));
if(er)
return er;
return(sock_accept(get_fs_long(args+0),
(struct sockaddr *)get_fs_long(args+1),
(int *)get_fs_long(args+2)));
case SYS_GETSOCKNAME:
er=verify_area(VERIFY_READ, args, 3 * sizeof(long));
if(er)
return er;
return(sock_getsockname(get_fs_long(args+0),
(struct sockaddr *)get_fs_long(args+1),
(int *)get_fs_long(args+2)));
case SYS_GETPEERNAME:
er=verify_area(VERIFY_READ, args, 3 * sizeof(long));
if(er)
return er;
return(sock_getpeername(get_fs_long(args+0),
(struct sockaddr *)get_fs_long(args+1),
(int *)get_fs_long(args+2)));
case SYS_SOCKETPAIR:
er=verify_area(VERIFY_READ, args, 4 * sizeof(long));
if(er)
return er;
return(sock_socketpair(get_fs_long(args+0),
get_fs_long(args+1),
get_fs_long(args+2),
(unsigned long *)get_fs_long(args+3)));
case SYS_SEND:
er=verify_area(VERIFY_READ, args, 4 * sizeof(unsigned long));
if(er)
return er;
return(sock_send(get_fs_long(args+0),
(void *)get_fs_long(args+1),
get_fs_long(args+2),
get_fs_long(args+3)));
case SYS_SENDTO:
er=verify_area(VERIFY_READ, args, 6 * sizeof(unsigned long));
if(er)
return er;
return(sock_sendto(get_fs_long(args+0),
(void *)get_fs_long(args+1),
get_fs_long(args+2),
get_fs_long(args+3),
(struct sockaddr *)get_fs_long(args+4),
get_fs_long(args+5)));
case SYS_RECV:
er=verify_area(VERIFY_READ, args, 4 * sizeof(unsigned long));
if(er)
return er;
return(sock_recv(get_fs_long(args+0),
(void *)get_fs_long(args+1),
get_fs_long(args+2),
get_fs_long(args+3)));
case SYS_RECVFROM:
er=verify_area(VERIFY_READ, args, 6 * sizeof(unsigned long));
if(er)
return er;
return(sock_recvfrom(get_fs_long(args+0),
(void *)get_fs_long(args+1),
get_fs_long(args+2),
get_fs_long(args+3),
(struct sockaddr *)get_fs_long(args+4),
(int *)get_fs_long(args+5)));
case SYS_SHUTDOWN:
er=verify_area(VERIFY_READ, args, 2* sizeof(unsigned long));
if(er)
return er;
return(sock_shutdown(get_fs_long(args+0),
get_fs_long(args+1)));
case SYS_SETSOCKOPT:
er=verify_area(VERIFY_READ, args, 5*sizeof(unsigned long));
if(er)
return er;
return(sock_setsockopt(get_fs_long(args+0),
get_fs_long(args+1),
get_fs_long(args+2),
(char *)get_fs_long(args+3),
get_fs_long(args+4)));
case SYS_GETSOCKOPT:
er=verify_area(VERIFY_READ, args, 5*sizeof(unsigned long));
if(er)
return er;
return(sock_getsockopt(get_fs_long(args+0),
get_fs_long(args+1),
get_fs_long(args+2),
(char *)get_fs_long(args+3),
(int *)get_fs_long(args+4)));
default:
return(-EINVAL);
}
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
网络
+关注
关注
14文章
7565浏览量
88764 -
函数
+关注
关注
3文章
4331浏览量
62593
发布评论请先 登录
相关推荐
无线BIRR通信网络系统
无线BIRR通信网络系统无线BIRR通信网络系统是天创汇智科技人员在研究了世界范围众多前沿无线自组网理论和系统威廉希尔官方网站
的基础上,针对复杂干扰的无线网络,创造性地提出BIRR(最佳即时路由)
发表于 05-27 14:15
【MiCOKit试用体验】庆科MiCO系统篇(5)MiCO 套接字
,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。Socket可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁,Socket在应用程
发表于 10-24 17:05
交换机网络从Soft_AP到Infrastructure后,套接字始终返回无效
与以下代码的客户端连接通过这个实现,TCPPOEN函数返回一个有效的套接字,但是在进入无限循环之后,我们通过在网页中配置网络来配置网络处于基
发表于 04-24 09:57
STM32例程能否与MFC网络套接字通信?
如题。。想自己写一个PC上的MFC界面。不要求太高的实时性和过大过高的传输数据量,偶尔一次传输几十字节即可,不知道STM32例程能否与MFC网络套接字通信。如果可以就入手一套了,另外,
发表于 08-02 04:36
RTT网络框架及SAL套接字抽象层介绍
的 SAL 套接字抽象层中把这些接口函数功能抽象,提供统一的 sal_socket()、sal_connect() 等接口,将不同的协议栈做了一层适配转换,应用层只需基于这些接口开发,SAL 再自动匹配
发表于 07-28 11:40
智能小区的网络系统设计
智能小区的网络系统设计::从智能化住宅小区的实际需求出发。分析了用Lonworks威廉希尔官方网站
实现智能小区管理网络的优越性,提出了智能小区的功能规划.设计了一个智能小区的网络系统
发表于 05-29 12:32
•27次下载
嵌入式远程健康监护网络系统的研究
数据传输的实时性、准确性和连续性将成为社区远程健康监护系统研究中的热点和难点。本文根据网络系统的特点,采用基于套接字的高效传输网络系统,该
发表于 08-27 09:24
•11次下载
Windows网络编程的原始套接字详细说明
利用“原始套接字”(Raw Socket),我们可访问位于基层的传输协议。本章专门讲解如何运用这种原始套接字,来模拟 IP的一些实用工具,比如 Tr a c e r o u t e和P
发表于 03-21 08:00
•1次下载
套接字socket包含哪些参数
套接字(Socket)是计算机网络中最基本的通信抽象,它定义了两个进程间通信的端点。在TCP/IP协议栈中,套接字是实现
评论