版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Socket函數(shù)集(linux)收藏accept(接受socket連線)相關(guān)函數(shù)socket,bind,listen,connect表頭文件#includevsys/types.h#includevsys/socket.h定義函數(shù)intaccept(ints,structsockaddr*addr,int*addrlen);函數(shù)說明accept()用來接受參數(shù)s的socket連線。參數(shù)s的socket必需先經(jīng)bind()、listen()函數(shù)處理過,當(dāng)有連線進來時accept()會返回一個新的socket處理代碼,往后的數(shù)據(jù)傳送與讀取就是經(jīng)由新的socket處理,而原來參數(shù)s的socket能繼
2、續(xù)使用accept()來接受新的連線要求。連線成功時,參數(shù)addr所指的結(jié)構(gòu)會被系統(tǒng)填入遠程主機的地址數(shù)據(jù),參數(shù)addrlen為scokaddr的結(jié)構(gòu)長度。關(guān)于結(jié)構(gòu)sockaddr的定義請參考bind()。返回值成功則返回新的socket處理代碼,失敗返回-1,錯誤原因存于errno中。錯誤代碼EBADF參數(shù)s非合法socket處理代碼。EFAULT參數(shù)addr指針指向無法存取的內(nèi)存空間。ENOTSOCK參數(shù)s為一文件描述詞,非socket。EOPNOTSUPP指定的socket并非SOCK_STREAM。EPERM防火墻拒絕此連線。ENOBUFS系統(tǒng)的緩沖內(nèi)存不足。ENOMEM核心內(nèi)存不足。
3、范例參考listen()。bind(對socket定位)相關(guān)函數(shù)socket,accept,connect,listen表頭文#includevsys/types.h件#includevsys/socket.h定義函數(shù)intbind(intsockfd,structsockaddr*my_addr,intaddrlen);函數(shù)說明bind()用來設(shè)置給參數(shù)sockfd的socket一個名稱。此名稱由參數(shù)my_addr指向一sockaddr結(jié)構(gòu),對于不同的socketdomain定義了一個通用的數(shù)據(jù)結(jié)構(gòu)。structsockaddrunsignedshortintsa_family;charsa
4、_data14;sa_family為調(diào)用socket()時的domain參數(shù),即AF_xxxx值。sa_data最多使用14個字符長度。此sockaddr結(jié)構(gòu)會因使用不同的socketdomain而有不同結(jié)構(gòu)定義,例如使用AF_INETdomain,其socketaddr結(jié)構(gòu)定義便為structsocketaddr_inunsignedshortintsin_family;uint16_tsin_port;structin_addrsin_addr;unsignedcharsin_zero8;structin_addruint32_ts_addr;sin_family即為sa_familysi
5、n_port為使用的port編號sin_addr.s_addr為IP地址sin_zero未使用。參數(shù)說addrlen為sockaddr的結(jié)構(gòu)長度。明返回值成功則返回0失敗返回-1,錯誤原因存于errno中。錯誤代碼EBADF參數(shù)sockfd非合法socket處理代碼。EACCESS權(quán)限不足ENOTSOCK參數(shù)sockfd為一文件描述詞,非socket。范例參考listen()connect(建立socket連線)相關(guān)函數(shù)socket,bind,listen表頭文件#includevsys/types.h#includevsys/socket.h定義函數(shù)intconnect(intsockfd,
6、structsockaddr*serv_addr,intaddrlen);函數(shù)說明connect()用來將參數(shù)sockfd的socket連至參數(shù)servaddr指定的網(wǎng)絡(luò)地址。結(jié)構(gòu)sockaddr請參考bind()。參數(shù)addrlen為sockaddr的結(jié)構(gòu)長度。返回值成功則返回0失敗返回-1,錯誤原因存于errno中。錯誤代碼EBADF參數(shù)sockfd非合法socket處理代碼EFAULT參數(shù)serv_addr指針指向無法存取的內(nèi)存空間ENOTSOCK參數(shù)sockfd為一文件描述詞,非socket。EISCONN參數(shù)sockfd的socket已是連線狀態(tài)ECONNREFUSED連線要求被se
7、rver端拒絕。ETIMEDOUT企圖連線的操作超過限定時間仍未有響應(yīng)。ENETUNREACH無法傳送數(shù)據(jù)包至指定的主機。EAFNOSUPPORTsockaddr結(jié)構(gòu)的sa_family不正確。EALREADYsocket為不可阻斷且先前的連線操作還未完成。范例/*利用socket的TCPclient*此程序會連線TCPserver,并將鍵盤輸入的字符串傳送給server。*TCPserver范例請參考listen()。*/#includevsys/stat.h#includevfcntl.h#includevunistd.h#includevsys/types.h#includevsys/s
8、ocket.h#includevnetinet/in.h#includevarpa/inet.h#definePORT1234#defineSERVER_IPmain()ints;structsockaddr_inaddr;charbuffer256;if(s=socket(AF_INET,SOCK_STREAM,0)vO)perror(socket);exit(1);/*填寫sockaddr_in結(jié)構(gòu)*/bzero(&addr,sizeof(addr);addr.sin_family=AF_INET;addr.sin_port=htons(PORT);addr.sin_addr.s_addr
9、=inet_addr(SERVER_IP);/*嘗試連線*/if(connect(s,&addr,sizeof(addr)vO)perror(connect);exit(1);/*接收由server端傳來的信息*/recv(s,buffer,sizeof(buffer),0);printf(n,buffer);while(1)bzero(buffer,sizeof(buffer);/*從標(biāo)準(zhǔn)輸入設(shè)備取得字符串*/read(STDIN_FILENO,buffer,sizeof(buffer);/*將字符串傳給server端*/if(send(s,buffer,sizeof(buffer),0)中
10、斷程序*/endprotoent(結(jié)束網(wǎng)絡(luò)協(xié)議數(shù)據(jù)的讀取)相關(guān)函數(shù)getprotoent,getprotobyname,getprotobynumber,setprotoent表頭文件#ineludevnetdb.h定義函數(shù)voidendprotoent(void);函數(shù)說明endprotoent()用來關(guān)閉由getprotoent()打開的文件。返回值無返回值范例參考getprotoent()endservent(結(jié)束網(wǎng)絡(luò)服務(wù)數(shù)據(jù)的讀取)相關(guān)函數(shù)getservent,getservbyname,getservbyport,setservent表頭文件#includevnetdb.h定義函數(shù)v
11、oidendservent(void);函數(shù)說明endservent()用來關(guān)閉由getservent()所打開的文件。返回值無返回值范例參考getservent()。getsockopt(取得socket狀態(tài))相關(guān)函數(shù)setsockopt表頭文件#includevsys/types.h#includevsys/socket.h定義函數(shù)intgetsockopt(ints,intlevel,intoptname,void*optval,socklen_t*optlen);函數(shù)說明getsockopt()會將參數(shù)s所指定的socket狀態(tài)返回。參數(shù)optname代表欲取得何種選項狀態(tài),而參數(shù)op
12、tval則指向欲保存結(jié)果的內(nèi)存地址,參數(shù)optlen則為該空間的大小。參數(shù)level、optname請參考setsockopt()。返回值成功則返回0若有錯誤則返回-1,錯誤原因存于errno錯誤代碼EBADF參數(shù)s并非合法的socket處理代碼ENOTSOCK參數(shù)s為一文件描述詞,非socketENOPROTOOPT參數(shù)optname指定的選項不正確EFAULT參數(shù)optval指針指向無法存取的內(nèi)存空間范例#includevsys/types.h#includevsys/socket.hmain()ints,optval,optlen=sizeof(int);if(s=socket(AF_I
13、NET,SOCK_STREAM,0)vO)perror(socket);getsockopt(s,S0SOCKET,SO_TYPE,&optval,&optlen);printf(optval=dn,optval);close(s);執(zhí)行optval=1/*SOCK_STREAM的定義正是此值*/htonl(將32位主機字符順序轉(zhuǎn)換成網(wǎng)絡(luò)字符順序)相關(guān)函數(shù)htons,ntohl,ntohs表頭文件#includevnetinet/in.h定義函數(shù)unsignedlonginthtonl(unsignedlonginthostlong);函數(shù)說明Htonl()用來將參數(shù)指定的32位hostlon
14、g轉(zhuǎn)換成網(wǎng)絡(luò)字符順序。返回值返回對應(yīng)的網(wǎng)絡(luò)字符順序。范例參考getservbyport()或connect()。htons(將16位主機字符順序轉(zhuǎn)換成網(wǎng)絡(luò)字符順序)相關(guān)函數(shù)htonl,ntohl,ntohs表頭文件#ineludevnetinet/in.h定義函數(shù)unsignedshortinthtons(unsignedshortinthostshort);函數(shù)說明htons()用來將參數(shù)指定的16位hostshort轉(zhuǎn)換成網(wǎng)絡(luò)字符順序。返回值返回對應(yīng)的網(wǎng)絡(luò)字符順序。范例參考connect()。inet_addr(將網(wǎng)絡(luò)地址轉(zhuǎn)成二進制的數(shù)字)相關(guān)函數(shù)inet_aton,inet_ntoa表頭
15、文件#includevsys/socket.h#includevnetinet/in.h#includevarpa/inet.h定義函數(shù)unsignedlongintinet_addr(constchar*cp);函數(shù)說明inet_addr()用來將參數(shù)cp所指的網(wǎng)絡(luò)地址字符串轉(zhuǎn)換成網(wǎng)絡(luò)所使用的二進制數(shù)字。網(wǎng)絡(luò)地址字符串是以數(shù)字和點組成的字符串,例女口16.1.1o.6返回值成功則返回對應(yīng)的網(wǎng)絡(luò)二進制的數(shù)字,失敗返回-1。inet_aton(將網(wǎng)絡(luò)地址轉(zhuǎn)成網(wǎng)絡(luò)二進制的數(shù)字)相關(guān)函數(shù)inet_addr,inet_ntoa表頭文件#includevsys/scoket.h#includevneti
16、net/in.h#includevarpa/inet.h定義函數(shù)intinet_aton(constchar*cp,structin_addr*inp);函數(shù)說明inet_aton()用來將參數(shù)cp所指的網(wǎng)絡(luò)地址字符串轉(zhuǎn)換成網(wǎng)絡(luò)使用的二進制的數(shù)字,然后存于參數(shù)inp所指的in_addr結(jié)構(gòu)中。結(jié)構(gòu)in_addr定義如下structin_addrunsignedlongints_addr;;返回值成功則返回非0值,失敗則返回0。inet_ntoa(將網(wǎng)絡(luò)二進制的數(shù)字轉(zhuǎn)換成網(wǎng)絡(luò)地址)相關(guān)函數(shù)inet_addr,inet_aton表頭文件#includevsys/socket.h#includevn
17、etinet/in.h#includevarpa/inet.h定義函數(shù)char*inet_ntoa(structin_addrin);函數(shù)說明inet_ntoa()用來將參數(shù)in所指的網(wǎng)絡(luò)二進制的數(shù)字轉(zhuǎn)換成網(wǎng)絡(luò)地址,然后將指向此網(wǎng)絡(luò)地址字符串的指針返回。返回值成功則返回字符串指針,失敗則返回NULL。listen(等待連接)相關(guān)函數(shù)socket,bind,accept,connect表頭文件#includevsys/socket.h定義函數(shù)intlisten(ints,intbacklog);函數(shù)說listen()用來等待參數(shù)s的socket連線。參數(shù)backlog指定同時明能處理的最大連接要
18、求,如果連接數(shù)目達此上限則client端將收到ECONNREFUSED的錯誤。Listen()并未開始接收連線,只是設(shè)置socket為listen模式,真正接收client端連線的是accept。通常listen()會在socket。,bind()之后調(diào)用,接著才調(diào)用accept。返回值成功則返回0,失敗返回-1,錯誤原因存于errno附加說明listen()只適用SOCK_STREAM或SOCK_SEQPACKET的socket類型。如果socket為AF_INET則參數(shù)backlog最大值可設(shè)至128。錯誤代碼EBADF參數(shù)sockfd非合法socket處理代碼EACCESS權(quán)限不足EOP
19、NOTSUPP指定的socket并未支援listen模式。范例#includevsys/types.h#includevsys/socket.h#includevnetinet/in.h#includevarpa/inet.h#includevunistd.h#definePORT1234#defineMAXSOCKFD10main()intsockfd,newsockfd,is_connectedMAXSOCKFD,fd;structsockaddr_inaddr;intaddr_len=sizeof(structsockaddr_in);fd_setreadfds;charbuffer25
20、6;charmsg=elcometoserer;if(sockfd=socket(AF_INET,SOCK_STREAM,0)v0)perror(socket);exit(1);bzero(&addr,sizeof(addr);addr.sin_family=AF_INET;addr.sin_port=htons(PORT);addr.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(sockfd,&addr,sizeof(addr)vO)perror(connect);exit(1);if(listen(sockfd,3)v0)perror(listen);
21、exit(1);for(fd=0;fdvMAXSOCKFD;fd+)is_connectedfd=0;while(1)FD_ZERO(&readfds);FD_SET(sockfd,&readfds);for(fd=0;fdvMAXSOCKFD;fd+)if(is_connectedfd)FD_SET(fd,&readfds);if(!select(MAXSOCKFD,&readfds,NULL,NULL,NULL)continue;for(fd=0;fdvMAXSOCKFD;fd+)if(FD_ISSET(fd,&readfds)if(sockfd=fd)if(newsockfd=accep
22、t(sockfd,&addr,&addr_len)vO)perror(accept);write(newsockfd,msg,sizeof(msg);is_connectednewsockfd=1;printf(cnnectfromn,inet_ntoa(addr.sin_addr);elsebzero(buffer,sizeof(buffer);if(read(fd,buffer,sizeof(buffer)定義函數(shù)unsignedlongintntohl(unsignedlongintnetlong);函數(shù)說明ntohl()用來將參數(shù)指定的32位netlong轉(zhuǎn)換成主機字符順序。返回值返回
23、對應(yīng)的主機字符順序。范例參考getservent()。ntohs(將16位網(wǎng)絡(luò)字符順序轉(zhuǎn)換成主機字符順序)相關(guān)函數(shù)htonl,htons,ntohl表頭文件#ineludevnetinet/in.h定義函數(shù)unsignedshortintntohs(unsignedshortintnetshort);函數(shù)說明ntohs()用來將參數(shù)指定的16位netshort轉(zhuǎn)換成主機字符順序。返回值返回對應(yīng)的主機順序。范例參考getservent()。recv(經(jīng)socket接收數(shù)據(jù))相關(guān)函數(shù)reevfrom,recvmsg,send,sendto,socket表頭文件#includevsys/types.
24、h#includevsys/socket.h定義函數(shù)intrecv(ints,void*buf,intlen,unsignedintflags);函數(shù)說recv()用來接收遠端主機經(jīng)指定的socket傳來的數(shù)據(jù),并把數(shù)據(jù)明存到由參數(shù)buf指向的內(nèi)存空間,參數(shù)len為可接收數(shù)據(jù)的最大長度。參數(shù)flags一般設(shè)0。其他數(shù)值定義如下:及返回值MSG_OOB接收以out-of-band送出的數(shù)據(jù)。MSG_PEEK返回來的數(shù)據(jù)并不會在系統(tǒng)內(nèi)刪除,如果再調(diào)用recv()會返回相同的數(shù)據(jù)內(nèi)容。MSG_WAITALL強迫接收到len大小的數(shù)據(jù)后才能返回,除非有錯誤或信號產(chǎn)生。MSG_NOSIGNAL此操作不愿
25、被SIGPIPE信號中斷返回值成功則返回接收到的字符數(shù),失敗返回-1,錯誤原因存于errno中。錯誤代EBADF參數(shù)s非合法的socket處理代碼碼FAULT參數(shù)中有一指針指向無法存取的內(nèi)存空間ENOTSOCK參數(shù)s為一文件描述詞,非socket。EINTR被信號所中斷EAGAIN此動作會令進程阻斷,但參數(shù)s的socket為不可阻斷ENOBUFS系統(tǒng)的緩沖內(nèi)存不足。ENOMEM核心內(nèi)存不足EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不正確。范例參考listen()。recvfrom(經(jīng)socket接收數(shù)據(jù))相關(guān)函數(shù)recv,recvmsg,send,sendto,socket表頭文件#includevsys
26、/types.h#includevsys/socket.h定義函數(shù)intrecvfrom(ints,void*buf,intlen,unsignedintflags,structsockaddr*from,int*fromlen);函數(shù)說recv()用來接收遠程主機經(jīng)指定的socket傳來的數(shù)據(jù),并把數(shù)據(jù)明存到由參數(shù)buf指向的內(nèi)存空間,參數(shù)len為可接收數(shù)據(jù)的最大長度。參數(shù)flags一般設(shè)0,其他數(shù)值定義請參考recv()。參數(shù)from用來指定欲傳送的網(wǎng)絡(luò)地址,結(jié)構(gòu)sockaddr請參考bind()。參數(shù)fromlen為sockaddr的結(jié)構(gòu)長度。返回值成功則返回接收到的字符數(shù),失敗則返回-
27、1,錯誤原因存于errno中。錯誤代EBADF參數(shù)s非合法的socket處理代碼碼EFAULT參數(shù)中有一指針指向無法存取的內(nèi)存空間。ENOTSOCK參數(shù)s為一文件描述詞,非socket。EINTR被信號所中斷。EAGAIN此動作會令進程阻斷,但參數(shù)s的socket為不可阻斷。ENOBUFS系統(tǒng)的緩沖內(nèi)存不足ENOMEM核心內(nèi)存不足EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不正確。范例/*利用socket的UDPclient*此程序會連線UDPserver,并將鍵盤輸入的字符串傳給server。*UDPserver范例請參考sendto()。*/#includevsys/stat.h#includevfcn
28、tl.h#includevunistd.h#includevsys/typs.h#includevsys/socket.h#includevnetinet/in.h#includevarpa/inet.h#definePORT2345#defineRRP12.1main()ints,len;structsockaddr_inaddr;intaddr_len=sizeof(structsockaddr_in);charbuffer256;/*建立socket*/if(s=socket(AF_INET,SOCK_DGRAM,0)vO)perror(socket);exit(1);/*填寫socka
29、ddr_in*/bzero(&addr,sizeof(addr);addr.sin_family=AF_INET;addr.sin_port=htons(PORT);addr.sin_addr.s_addr=inet_addr(SERVER_IP);while(1)bzero(buffer,sizeof(buffer);/*從標(biāo)準(zhǔn)輸入設(shè)備取得字符串*/len=read(STDIN_FILENO,buffer,sizeof(buffer);/*將字符串傳送給server端*/sendto(s,buffer,len,O,&addr,addr_len);/*接收server端返回的字符串*/len=
30、recvfrom(s,buffer,sizeof(buffer),0,&addr,&addr_len);printf(receives,buffer);執(zhí)行(先執(zhí)行udpserver再執(zhí)行udpclient)hello/*從鍵盤輸入字符串*/receive:hello/*server端返回來的字符串*/recvmsg(經(jīng)socket接收數(shù)據(jù))相關(guān)函數(shù)recv,recvfrom,send,sendto,sendmsg,socket表頭文件#includevsys/types.h#includevsys/socktet.h定義函數(shù)intrecvmsg(ints,structmsghdr*msg,u
31、nsignedintflags);函數(shù)說明recvmsg()用來接收遠程主機經(jīng)指定的socket傳來的數(shù)據(jù)。參數(shù)s為已建立好連線的socket,如果利用UDP協(xié)議則不需經(jīng)過連線操作。參數(shù)msg指向欲連線的數(shù)據(jù)結(jié)構(gòu)內(nèi)容,參數(shù)flags一般設(shè)0,詳細描述請參考send()。關(guān)于結(jié)構(gòu)msghdr的定義請參考sendmsg()。返回值成功則返回接收到的字符數(shù),失敗則返回-1,錯誤原因存于errno中。錯誤代碼EBADF參數(shù)s非合法的socket處理代碼。EFAULT參數(shù)中有一指針指向無法存取的內(nèi)存空間ENOTSOCK參數(shù)s為一文件描述詞,非socket。EINTR被信號所中斷。EAGAIN此操作會令進
32、程阻斷,但參數(shù)s的socket為不可阻斷。ENOBUFS系統(tǒng)的緩沖內(nèi)存不足ENOMEM核心內(nèi)存不足EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不正確。范例參考recvfrom()。send(經(jīng)socket傳送數(shù)據(jù))相關(guān)函數(shù)sendto,sendmsg,recv,recvfrom,socket表頭文#includevsys/types.h件#includevsys/socket.h定義函數(shù)intsend(ints,constvoid*msg,intlen,unsignedintfalgs);函數(shù)說明send()用來將數(shù)據(jù)由指定的socket傳給對方主機。參數(shù)s為已建立好連接的socket。參數(shù)msg指向欲連線
33、的數(shù)據(jù)內(nèi)容,參數(shù)len則為數(shù)據(jù)長度。參數(shù)flags般設(shè)0其他數(shù)值定義如下:MSG_OOB傳送的數(shù)據(jù)以out-of-band送出。MSG_DONTROUTE取消路由表查詢MSG_DONTWAIT設(shè)置為不可阻斷運作MSG_NOSIGNAL此動作不愿被SIGPIPE信號中斷。返回值成功則返回實際傳送出去的字符數(shù),失敗返回-1。錯誤原因存于errno錯誤代碼EBADF參數(shù)s非合法的socket處理代碼。EFAULT參數(shù)中有一指針指向無法存取的內(nèi)存空間ENOTSOCK參數(shù)s為一文件描述詞,非socket。EINTR被信號所中斷。EAGAIN此操作會令進程阻斷,但參數(shù)s的socket為不可阻斷。ENOBU
34、FS系統(tǒng)的緩沖內(nèi)存不足ENOMEM核心內(nèi)存不足EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不正確。范例參考connect()sendmsg(經(jīng)socket傳送數(shù)據(jù))相關(guān)函數(shù)send,sendto,recv,recvfrom,recvmsg,socket表頭文件#includevsys/types.h#includevsys/socket.h定義函數(shù)intsendmsg(ints,conststrcutmsghdr*msg,unsignedintflags);函數(shù)說sendmsg()用來將數(shù)據(jù)由指定的socket傳給對方主機。參數(shù)s為明已建立好連線的socket,如果利用UDP協(xié)議則不需經(jīng)過連線操作。參數(shù)ms
35、g指向欲連線的數(shù)據(jù)結(jié)構(gòu)內(nèi)容,參數(shù)flags一般默認為0,詳細描述請參考send()。結(jié)構(gòu)msghdr定義如下structmsghdrvoid*msg_name;/*Addresstosendto/receivefrom.*/socklen_tmsg_namelen;/*Lengthofaddresdata*/strcutiovec*msg_iov;/*Vectorofdatatosend/receiveinto*/size_tmsg_iovlen;/*Numberofelementsinthevector*/void*msg_control;/*Ancillarydat*/size_tmsg_
36、controllen;/*Ancillarydatabufferlength*/intmsg_flags;/*Flagsonreceivedmessage*/;返回值成功則返回實際傳送出去的字符數(shù),失敗返回-1,錯誤原因存于errno錯誤代碼EBADF參數(shù)s非合法的socket處理代碼。EFAULT參數(shù)中有一指針指向無法存取的內(nèi)存空間ENOTSOCK參數(shù)s為一文件描述詞,非socket。EINTR被信號所中斷。EAGAIN此操作會令進程阻斷,但參數(shù)s的socket為不可阻斷。ENOBUFS系統(tǒng)的緩沖內(nèi)存不足ENOMEM核心內(nèi)存不足EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不正確。范例參考sendto()。
37、sendto(經(jīng)socket傳送數(shù)據(jù))相關(guān)函數(shù)send,sendmsg,recv,recvfrom,socket表頭文#include件#inelude定義函in數(shù)itsendto(ints,constvoid*msg,intlen,unsignedintflags,conststructsockaddr*to,inttolen);函數(shù)說明sendto()用來將數(shù)據(jù)由指定的socket傳給對方主機。參數(shù)s為已建好連線的socket,如果利用UDP協(xié)議則不需經(jīng)過連線操作。參數(shù)msg指向欲連線的數(shù)據(jù)內(nèi)容,參數(shù)flags一般設(shè)0,詳細描述請參考send()。參數(shù)to用來指定欲傳送的網(wǎng)絡(luò)地址,結(jié)構(gòu)so
38、ckaddr請參考bind()。參數(shù)tolen為sockaddr的結(jié)果長度。返回值成功則返回實際傳送出去的字符數(shù),失敗返回一1錯誤原因存于errno中。錯誤代碼EBADF參數(shù)s非法的socket處理代碼。EFAULT參數(shù)中有一指針指向無法存取的內(nèi)存空間。WNOTSOCKcanshus為一文件描述詞,非socket。EINTR被信號所中斷。EAGAIN此動作會令進程阻斷,但參數(shù)s的soket為補課阻斷的。ENOBUFS系統(tǒng)的緩沖內(nèi)存不足。EINVAL傳給系統(tǒng)調(diào)用的參數(shù)不正確。范例#include#include#includevnetinet.in.h#includevarpa.inet.h#d
39、efinePORT2345/*使用的port*/main()intsockfd,len;structsockaddr_inaddr;charbuffer256;/*建立socket*/if(sockfd=socket(AF_INET,SOCK_DGRAM,0)vOperror(socket);exit(1);/*填寫sockaddr_in結(jié)構(gòu)*/bzero(&addr,sizeof(addr);addr.sin_family=AF_INET;addr.sin_port=htons(PORT);addr.sin_addr=hton1(INADDR_ANY);if(bind(sockfd,&add
40、r,sizeof(addr)定義函數(shù)voidsetprotoent(intstayopen);函數(shù)說明setprotoent()用來打開/etc/protocols,如果參數(shù)stayopen值為1則接下來的getprotobyname()或getprotobynumber()將不會自動關(guān)閉此文件。setservent(打開主機網(wǎng)絡(luò)服務(wù)的數(shù)據(jù)文件)相關(guān)函數(shù)getservent,getservbyname,getservbyport,endservent表頭文件#include定義函數(shù)voidsetservent(intstayopen);函數(shù)說明setservent()用來打開/etc/serv
41、ices,如果參數(shù)stayopen值為1則接下來的getservbyname()或getservbyport()將補回自動關(guān)閉文件。setsockopt(設(shè)置socket狀態(tài))相關(guān)函數(shù)getsockopt表頭文件#include#includevsys/socket.h定義函數(shù)intsetsockopt(ints,intlevel,intoptname,constvoid*optvalsocklen_toptlen);函數(shù)說明setsockopt()用來設(shè)置參數(shù)s所指定的socket狀態(tài)。參數(shù)level代表欲設(shè)置的網(wǎng)絡(luò)層,般設(shè)成SOL_SOCKET以存取socket層。參數(shù)optname代表欲
42、設(shè)置的選項,有下列幾種數(shù)值:SO_DEBUG打開或關(guān)閉排錯模式SO_REUSEADDR允許在bind()過程中本地地址可重復(fù)使用SO_TYPE返回socket形態(tài)。SO_ERROR返回socket已發(fā)生的錯誤原因SO_DONTROUTE送出的數(shù)據(jù)包不要利用路由設(shè)備來傳輸。SO_BROADCAST使用廣播方式傳送SO_SNDBUF設(shè)置送出的暫存區(qū)大小SO_RCVBUF設(shè)置接收的暫存區(qū)大小SO_KEEPALIVE定期確定連線是否已終止。SOOOBINLINE當(dāng)接收到00B數(shù)據(jù)時會馬上送至標(biāo)準(zhǔn)輸入設(shè)備SO_LINGER確保數(shù)據(jù)安全且可靠的傳送出去。參數(shù)optva1代表欲設(shè)置的值,參數(shù)optien則為optval的長度。返回值成功則返回0若有錯誤則返回-1,錯誤原因存于errno。附加說明EBADF參數(shù)s并非合法的socket處理代碼。ENOTSOCK參數(shù)s為一文件描述詞,非sock
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 研究生考試考研計算機學(xué)科專業(yè)基礎(chǔ)(408)試題與參考答案(2024年)
- 社區(qū)做核酸檢測心得體會
- 新聞部工作計劃四篇
- 大江保衛(wèi)戰(zhàn)教案6篇
- 2025送餐合同模板范文
- 2025常用的借款擔(dān)保合同書范本
- 小學(xué)班主任教學(xué)總結(jié)
- 工人辭職報告15篇
- 醫(yī)生崗前的學(xué)習(xí)培訓(xùn)心得體會
- 2025酒店經(jīng)理新版勞動合同范本
- 山西省晉中市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 養(yǎng)老機構(gòu)護理管理制度與規(guī)范
- DB31∕T 875-2015 人身損害受傷人員休息期、營養(yǎng)期、護理期評定準(zhǔn)則
- 08S305-小型潛水泵選用及安裝圖集
- 工程監(jiān)理企業(yè)各部門崗位職責(zé)
- 取暖器產(chǎn)品1油汀ny221218試驗報告
- 國家開放大學(xué)電大《建筑制圖基礎(chǔ)》機考三套標(biāo)準(zhǔn)題庫及答案3
- 雅馬哈PSR-37中文說明書
- 一汽大眾新員工三級安全教育(入廠級)
- 最新X公司事業(yè)部建設(shè)規(guī)劃方案
- 十一學(xué)校行動綱要
評論
0/150
提交評論