0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

网络系统调用网络套接字入口函数

麦辣鸡腿堡 来源:技术简说 作者:董旭 2023-07-24 11:02 次阅读

网络套接字入口函数

//所有的网络套接字系统调用函数(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

    文章

    7251

    浏览量

    87441
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61309
收藏 人收藏

    评论

    相关推荐

    无线BIRR通信网络系统

    无线BIRR通信网络系统无线BIRR通信网络系统是天创汇智科技人员在研究了世界范围众多前沿无线自组网理论和系统技术的基础上,针对复杂干扰的无线网络,创造性地提出BIRR(最佳即时路由)
    发表于 05-27 14:15

    【MiCOKit试用体验】庆科MiCO系统篇(5)MiCO 套接

    ,简单的说就是通信的两方的一种约定,用套接中的相关函数来完成通信过程。Socket可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁,Socket在应用程
    发表于 10-24 17:05

    UNIX域套接

    UNIX域套接用于在同一台计算机上运行的进程之间的通信。虽然因特网域套接可用于同一目的,但UNIX域套接
    发表于 09-02 11:59

    神经网络系统辨识程序

    神经网络系统辨识程序
    发表于 01-04 13:29

    关闭没有网络连接的套接时,未释放数据包堆

    连接到网络I,然后使用TCPIPPUTCPY关闭功能关闭套接,除了分组存储器W以外,所有的内存都被释放了。HICH大约是200节。如果我尝试了足够的连接,堆最终会用完,并且我不能再
    发表于 12-07 14:53

    交换机网络从Soft_AP到Infrastructure后,套接始终返回无效

    与以下代码的客户端连接通过这个实现,TCPPOEN函数返回一个有效的套接,但是在进入无限循环之后,我们通过在网页中配置网络来配置网络处于基
    发表于 04-24 09:57

    STM32例程能否与MFC网络套接通信?

    如题。。想自己写一个PC上的MFC界面。不要求太高的实时性和过大过高的传输数据量,偶尔一次传输几十节即可,不知道STM32例程能否与MFC网络套接通信。如果可以就入手一套了,另外,
    发表于 08-02 04:36

    网络损伤模拟测试网络系统的可靠性

    、丢包、乱序、错包等各种异常情况对通信网络的影响也越来越大。因此在网络系统及通信设备上线前,需要通过有效的手段模拟现实网络中的各种异常情况来进行充分测试,从而保证网络系统的可靠性。 文
    发表于 04-14 09:36

    如何通过socket系统调用创建一个套接

    面试被问到TCP/UDP的bind函数设计,所以前来补一下套接部分的内容套接:进程间通信的方法:可以在同一台机器或者
    发表于 12-24 06:38

    一文读懂RT-Thread的SAL套接抽象层

    函数,用于系统中大部分网络开发应用。往下第二部分为 SAL 套接抽象层,通过它 RT-Thread
    发表于 04-08 15:44

    RTT网络框架及SAL套接抽象层介绍

    的 SAL 套接抽象层中把这些接口函数功能抽象,提供统一的 sal_socket()、sal_connect() 等接口,将不同的协议栈做了一层适配转换,应用层只需基于这些接口开发,SAL 再自动匹配
    发表于 07-28 11:40

    智能小区的网络系统设计

    智能小区的网络系统设计::从智能化住宅小区的实际需求出发。分析了用Lonworks技术实现智能小区管理网络的优越性,提出了智能小区的功能规划.设计了一个智能小区的网络系统
    发表于 05-29 12:32 27次下载

    嵌入式远程健康监护网络系统的研究

    数据传输的实时性、准确性和连续性将成为社区远程健康监护系统研究中的热点和难点。本文根据网络系统的特点,采用基于套接字的高效传输网络系统,该系统
    发表于 08-27 09:24 11次下载

    什么是网络系统环境

    什么是网络系统环境              网络系统
    发表于 12-28 14:47 1160次阅读

    网络套接系统调用如何到达sys_socketcall

    套接系统调用如何到达sys_socketcall accept函数为例 系统调用中参数从用户态
    的头像 发表于 07-24 11:35 409次阅读