網(wǎng)絡(luò)套接字入口函數(shù)
//所有的網(wǎng)絡(luò)套接字系統(tǒng)調(diào)用函數(shù)(socket bind listen connect )都使用一個(gè)共同的入口函數(shù):sys_socketcall
/*
第一個(gè)參數(shù)call表示被調(diào)用的應(yīng)用層接口函數(shù),第二個(gè)參數(shù)是一個(gè)指針,指向具體被調(diào)用函數(shù)(如accept函數(shù))所需要的參數(shù)。
這些在用戶系統(tǒng)調(diào)用時(shí)傳入的參數(shù)將原封不動(dòng)地傳遞給內(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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
8265瀏覽量
94722 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67502
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
無(wú)線BIRR通信網(wǎng)絡(luò)系統(tǒng)
無(wú)線BIRR通信網(wǎng)絡(luò)系統(tǒng)無(wú)線BIRR通信網(wǎng)絡(luò)系統(tǒng)是天創(chuàng)匯智科技人員在研究了世界范圍眾多前沿?zé)o線自組網(wǎng)理論和系統(tǒng)技術(shù)的基礎(chǔ)上,針對(duì)復(fù)雜干擾的無(wú)線網(wǎng)絡(luò),創(chuàng)造性地提出BIRR(最佳即時(shí)路由)
發(fā)表于 05-27 14:15
【MiCOKit試用體驗(yàn)】慶科MiCO系統(tǒng)篇(5)MiCO 套接字
,簡(jiǎn)單的說(shuō)就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來(lái)完成通信過(guò)程。Socket可以看成在兩個(gè)程序進(jìn)行通訊連接中的一個(gè)端點(diǎn),是連接應(yīng)用程序和網(wǎng)絡(luò)驅(qū)動(dòng)程序的橋梁,Socket在應(yīng)用程
發(fā)表于 10-24 17:05
UNIX域套接字
UNIX域套接字用于在同一臺(tái)計(jì)算機(jī)上運(yùn)行的進(jìn)程之間的通信。雖然因特網(wǎng)域套接字可用于同一目的,但UNIX域套接
發(fā)表于 09-02 11:59
交換機(jī)網(wǎng)絡(luò)從Soft_AP到Infrastructure后,套接字始終返回?zé)o效
與以下代碼的客戶端連接通過(guò)這個(gè)實(shí)現(xiàn),TCPPOEN函數(shù)返回一個(gè)有效的套接字,但是在進(jìn)入無(wú)限循環(huán)之后,我們通過(guò)在網(wǎng)頁(yè)中配置網(wǎng)絡(luò)來(lái)配置網(wǎng)絡(luò)處于基
發(fā)表于 04-24 09:57
STM32例程能否與MFC網(wǎng)絡(luò)套接字通信?
如題。。想自己寫(xiě)一個(gè)PC上的MFC界面。不要求太高的實(shí)時(shí)性和過(guò)大過(guò)高的傳輸數(shù)據(jù)量,偶爾一次傳輸幾十字節(jié)即可,不知道STM32例程能否與MFC網(wǎng)絡(luò)套接字通信。如果可以就入手一套了,另外,
發(fā)表于 08-02 04:36
如何通過(guò)socket系統(tǒng)調(diào)用創(chuàng)建一個(gè)套接字
面試被問(wèn)到TCP/UDP的bind函數(shù)設(shè)計(jì),所以前來(lái)補(bǔ)一下套接字部分的內(nèi)容套接字:進(jìn)程間通信的方法:可以在同一臺(tái)機(jī)器或者
發(fā)表于 12-24 06:38
RTT網(wǎng)絡(luò)框架及SAL套接字抽象層介紹
的 SAL 套接字抽象層中把這些接口函數(shù)功能抽象,提供統(tǒng)一的 sal_socket()、sal_connect() 等接口,將不同的協(xié)議棧做了一層適配轉(zhuǎn)換,應(yīng)用層只需基于這些接口開(kāi)發(fā),SAL 再自動(dòng)匹配
發(fā)表于 07-28 11:40
智能小區(qū)的網(wǎng)絡(luò)系統(tǒng)設(shè)計(jì)
智能小區(qū)的網(wǎng)絡(luò)系統(tǒng)設(shè)計(jì)::從智能化住宅小區(qū)的實(shí)際需求出發(fā)。分析了用Lonworks技術(shù)實(shí)現(xiàn)智能小區(qū)管理網(wǎng)絡(luò)的優(yōu)越性,提出了智能小區(qū)的功能規(guī)劃.設(shè)計(jì)了一個(gè)智能小區(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ù)膶?shí)時(shí)性、準(zhǔn)確性和連續(xù)性將成為社區(qū)遠(yuǎn)程健康監(jiān)護(hù)系統(tǒng)研究中的熱點(diǎn)和難點(diǎn)。本文根據(jù)網(wǎng)絡(luò)系統(tǒng)的特點(diǎn),采用基于套接字的高效傳輸網(wǎng)絡(luò)系統(tǒng),該
發(fā)表于 08-27 09:24
?11次下載
車(chē)載網(wǎng)絡(luò)系統(tǒng)硬件及其驅(qū)動(dòng)的設(shè)計(jì)
以ARM9為開(kāi)發(fā)平臺(tái),嵌入式Linux為操作系統(tǒng),完成了汽車(chē)網(wǎng)絡(luò)系統(tǒng)硬件及其驅(qū)動(dòng)程序的設(shè)計(jì)。具體論述網(wǎng)絡(luò)系統(tǒng)中接口和模塊的設(shè)計(jì)思路,同時(shí)給出詳細(xì)的設(shè)計(jì)原理圖。該網(wǎng)絡(luò)系統(tǒng)具有高
發(fā)表于 07-13 16:51
?23次下載
什么是網(wǎng)絡(luò)系統(tǒng)環(huán)境
什么是網(wǎng)絡(luò)系統(tǒng)環(huán)境 網(wǎng)絡(luò)系統(tǒng)
發(fā)表于 12-28 14:47
?1413次閱讀
Windows網(wǎng)絡(luò)編程的原始套接字詳細(xì)說(shuō)明
利用“原始套接字”(Raw Socket),我們可訪問(wèn)位于基層的傳輸協(xié)議。本章專(zhuān)門(mén)講解如何運(yùn)用這種原始套接字,來(lái)模擬 IP的一些實(shí)用工具,比如 Tr a c e r o u t e和P
發(fā)表于 03-21 08:00
?1次下載
網(wǎng)絡(luò)套接字系統(tǒng)調(diào)用如何到達(dá)sys_socketcall
套接字系統(tǒng)調(diào)用如何到達(dá)sys_socketcall accept函數(shù)為例 系統(tǒng)
套接字socket包含哪些參數(shù)
套接字(Socket)是計(jì)算機(jī)網(wǎng)絡(luò)中最基本的通信抽象,它定義了兩個(gè)進(jìn)程間通信的端點(diǎn)。在TCP/IP協(xié)議棧中,套接字是實(shí)現(xiàn)
網(wǎng)絡(luò)系統(tǒng)調(diào)用網(wǎng)絡(luò)套接字入口函數(shù)
評(píng)論