網絡套接字入口函數
//所有的網絡套接字系統調用函數(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文章
7571瀏覽量
88883 -
函數
+關注
關注
3文章
4333瀏覽量
62699
發布評論請先 登錄
相關推薦
無線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協議棧中,套接字是實現
評論