網(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ù)將原封不動地傳遞給內(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);
}
}
-
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7724瀏覽量
90182 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4365瀏覽量
63906
發(fā)布評論請先 登錄
無線BIRR通信網(wǎng)絡(luò)系統(tǒng)
【MiCOKit試用體驗(yàn)】慶科MiCO系統(tǒng)篇(5)MiCO 套接字
UNIX域套接字
交換機(jī)網(wǎng)絡(luò)從Soft_AP到Infrastructure后,套接字始終返回?zé)o效
STM32例程能否與MFC網(wǎng)絡(luò)套接字通信?
如何通過socket系統(tǒng)調(diào)用創(chuàng)建一個(gè)套接字
一文讀懂RT-Thread的SAL套接字抽象層
RTT網(wǎng)絡(luò)框架及SAL套接字抽象層介紹
嵌入式遠(yuǎn)程健康監(jiān)護(hù)網(wǎng)絡(luò)系統(tǒng)的研究
車載網(wǎng)絡(luò)系統(tǒng)硬件及其驅(qū)動的設(shè)計(jì)
什么是網(wǎng)絡(luò)系統(tǒng)環(huán)境
Windows網(wǎng)絡(luò)編程的原始套接字詳細(xì)說明

評論