0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

網(wǎng)絡(luò)系統(tǒng)調(diào)用網(wǎng)絡(luò)套接字入口函數(shù)

麥辣雞腿堡 ? 來源:技術(shù)簡說 ? 作者:董旭 ? 2023-07-24 11:02 ? 次閱讀

網(wǎng)絡(luò)套接字入口函數(shù)

//所有的網(wǎng)絡(luò)套接字系統(tǒng)調(diào)用函數(shù)(socket bind listen connect )都使用一個共同的入口函數(shù):sys_socketcall
/*
第一個參數(shù)call表示被調(diào)用的應(yīng)用層接口函數(shù),第二個參數(shù)是一個指針,指向具體被調(diào)用函數(shù)(如accept函數(shù))所需要的參數(shù)。
這些在用戶系統(tǒng)調(diào)用時傳入的參數(shù)將原封不動地傳遞給內(nèi)核網(wǎng)絡(luò)棧相關(guān)底層函數(shù)使用
*/
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);
}
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7442

    瀏覽量

    88442
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4259

    瀏覽量

    62227
收藏 人收藏

    評論

    相關(guān)推薦

    無線BIRR通信網(wǎng)絡(luò)系統(tǒng)

    無線BIRR通信網(wǎng)絡(luò)系統(tǒng)無線BIRR通信網(wǎng)絡(luò)系統(tǒng)是天創(chuàng)匯智科技人員在研究了世界范圍眾多前沿?zé)o線自組網(wǎng)理論和系統(tǒng)技術(shù)的基礎(chǔ)上,針對復(fù)雜干擾的無線網(wǎng)絡(luò),創(chuàng)造性地提出BIRR(最佳即時路由)
    發(fā)表于 05-27 14:15

    【MiCOKit試用體驗】慶科MiCO系統(tǒng)篇(5)MiCO 套接

    ,簡單的說就是通信的兩方的一種約定,用套接中的相關(guān)函數(shù)來完成通信過程。Socket可以看成在兩個程序進(jìn)行通訊連接中的一個端點,是連接應(yīng)用程序和網(wǎng)絡(luò)驅(qū)動程序的橋梁,Socket在應(yīng)用程
    發(fā)表于 10-24 17:05

    UNIX域套接

    UNIX域套接用于在同一臺計算機(jī)上運行的進(jìn)程之間的通信。雖然因特網(wǎng)域套接可用于同一目的,但UNIX域套接
    發(fā)表于 09-02 11:59

    神經(jīng)網(wǎng)絡(luò)系統(tǒng)辨識程序

    神經(jīng)網(wǎng)絡(luò)系統(tǒng)辨識程序
    發(fā)表于 01-04 13:29

    交換機(jī)網(wǎng)絡(luò)從Soft_AP到Infrastructure后,套接始終返回?zé)o效

    與以下代碼的客戶端連接通過這個實現(xiàn),TCPPOEN函數(shù)返回一個有效的套接,但是在進(jìn)入無限循環(huán)之后,我們通過在網(wǎng)頁中配置網(wǎng)絡(luò)來配置網(wǎng)絡(luò)處于基
    發(fā)表于 04-24 09:57

    STM32例程能否與MFC網(wǎng)絡(luò)套接通信?

    如題。。想自己寫一個PC上的MFC界面。不要求太高的實時性和過大過高的傳輸數(shù)據(jù)量,偶爾一次傳輸幾十節(jié)即可,不知道STM32例程能否與MFC網(wǎng)絡(luò)套接通信。如果可以就入手一套了,另外,
    發(fā)表于 08-02 04:36

    如何通過socket系統(tǒng)調(diào)用創(chuàng)建一個套接

    面試被問到TCP/UDP的bind函數(shù)設(shè)計,所以前來補(bǔ)一下套接部分的內(nèi)容套接:進(jìn)程間通信的方法:可以在同一臺機(jī)器或者
    發(fā)表于 12-24 06:38

    一文讀懂RT-Thread的SAL套接抽象層

    函數(shù),用于系統(tǒng)中大部分網(wǎng)絡(luò)開發(fā)應(yīng)用。往下第二部分為 SAL 套接抽象層,通過它 RT-Thread
    發(fā)表于 04-08 15:44

    RTT網(wǎng)絡(luò)框架及SAL套接抽象層介紹

    的 SAL 套接抽象層中把這些接口函數(shù)功能抽象,提供統(tǒng)一的 sal_socket()、sal_connect() 等接口,將不同的協(xié)議棧做了一層適配轉(zhuǎn)換,應(yīng)用層只需基于這些接口開發(fā),SAL 再自動匹配
    發(fā)表于 07-28 11:40

    智能小區(qū)的網(wǎng)絡(luò)系統(tǒng)設(shè)計

    智能小區(qū)的網(wǎng)絡(luò)系統(tǒng)設(shè)計::從智能化住宅小區(qū)的實際需求出發(fā)。分析了用Lonworks技術(shù)實現(xiàn)智能小區(qū)管理網(wǎng)絡(luò)的優(yōu)越性,提出了智能小區(qū)的功能規(guī)劃.設(shè)計了一個智能小區(qū)的網(wǎng)絡(luò)系統(tǒng)
    發(fā)表于 05-29 12:32 ?27次下載

    嵌入式遠(yuǎn)程健康監(jiān)護(hù)網(wǎng)絡(luò)系統(tǒng)的研究

    數(shù)據(jù)傳輸?shù)膶崟r性、準(zhǔn)確性和連續(xù)性將成為社區(qū)遠(yuǎn)程健康監(jiān)護(hù)系統(tǒng)研究中的熱點和難點。本文根據(jù)網(wǎng)絡(luò)系統(tǒng)的特點,采用基于套接的高效傳輸網(wǎng)絡(luò)系統(tǒng),該
    發(fā)表于 08-27 09:24 ?11次下載

    什么是網(wǎng)絡(luò)系統(tǒng)環(huán)境

    什么是網(wǎng)絡(luò)系統(tǒng)環(huán)境              網(wǎng)絡(luò)系統(tǒng)
    發(fā)表于 12-28 14:47 ?1227次閱讀

    Windows網(wǎng)絡(luò)編程的原始套接詳細(xì)說明

    利用“原始套接”(Raw Socket),我們可訪問位于基層的傳輸協(xié)議。本章專門講解如何運用這種原始套接,來模擬 IP的一些實用工具,比如 Tr a c e r o u t e和P
    發(fā)表于 03-21 08:00 ?1次下載
    Windows<b class='flag-5'>網(wǎng)絡(luò)</b>編程的原始<b class='flag-5'>套接</b><b class='flag-5'>字</b>詳細(xì)說明

    網(wǎng)絡(luò)套接系統(tǒng)調(diào)用如何到達(dá)sys_socketcall

    套接系統(tǒng)調(diào)用如何到達(dá)sys_socketcall accept函數(shù)為例 系統(tǒng)
    的頭像 發(fā)表于 07-24 11:35 ?599次閱讀

    套接socket包含哪些參數(shù)

    套接(Socket)是計算機(jī)網(wǎng)絡(luò)中最基本的通信抽象,它定義了兩個進(jìn)程間通信的端點。在TCP/IP協(xié)議棧中,套接是實現(xiàn)
    的頭像 發(fā)表于 08-16 11:02 ?269次閱讀