網路IPC 套接字

2021-09-08 17:07:22 字數 3163 閱讀 4889

套接字描述符

#includeint  socket( int  domain,  int  type,  int prootocol);

返回值:若成功,返回檔案(套接字)描述符,若出錯,返回 -1

描述af_inet

ipv4 網際網路域

af_inet6

ipv6網際網路域

af_unix

unix域

af_upspec

未指定

name                    purpose                     man page

af_unix, af_local local communication unix(7)

af_inet ipv4 internet protocols ip(7)

af_inet6 ipv6 internet protocols ipv6(7)

af_ipx ipx - novell protocols

af_netlink kernel user inte***ce device netlink(7)

af_x25 itu-t x.25 / iso-8208 protocol x25(7)

af_ax25 amateur radio ax.25 protocol

af_atmpvc access to raw atm pvcs

af_packet low level packet inte***ce packet(7)

型別

描述sock_dgram

固定長度的、無連線的、不可靠的報文傳遞

sock_raw

ip協議的資料報連線

sock_seqpacket

固定長度的、有序的、可靠的、面向連線的報文傳遞

sock_stream

有序的、可靠的、雙向的、面向連線的位元組流 協議

描述ipproto_ip

ipv4 網際協議

ipproto_ipv6

ipv6 網際協議

ipproto_icmp

網際網路控制報文協議

ipproto_raw

原始ip資料報協議

ipproto_tcp

傳輸控制協議

ipproto_udp

使用者資料報協議

我們在來區分一下sock_dgram和sock_stream這兩種套接字型別

套接字的shutdown

#includeint  shutdown(int  sockfd, int  how);

返回值:若成功,返回0,若失敗,返回 -1

#includeuint32_t  htonl( uint32_t hostint32 ) ;  返回值:以網路位元組序表示的32位整數

uint16_t htons( uint16_t hostint16); 返回值:以網路位元組序表示的16位整數

uint32_t ntohl( uint32_t netint32); 返回值:以主機位元組序表示的32位整數

uint16_t ntohs( uint16_t netint16); 返回值:以主機位元組序表示的16位整數

位址格式

在linux下中,該結構定義為:

struct  sockaddr
struct in_addr

struct sockaddr_in

#includeconst char *inet_ntop(int domain,const void *restrict addr, char *restrict str, socklen_t size);

int inet_pton(int damain, const char* restrict str, void *restrict addr);

返回值:若成功,返回1,;若格式無效,返回0;若出錯,返回 -1

將套接字與位址關聯
#includeint bind(int sockfd, const struct sockaddr *addr, socklen_t len);

返回值:若成功,返回0;若出錯,返回 -1

在程序正在執行的計算機上,指定的位址必須有效;不能指定乙個其他機器的位址。

位址必須和建立套接字時的位址族所支援的格式相匹配。

位址中的埠號必須不小於1024,除非該程序具有相應的特權。

一般只能將乙個套接字端點繫結到乙個給定位址上,儘管有些協議允許多重繫結。

建立連線

#includeint connect(int sockfd, const  struct sockaddr *addr, socklen_t len);

返回值:若成功,返回0;若出錯,返回 -1

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 

10 #define serv_port 9527

11 12 int main(void)

13 59

60 /*關閉鏈結*/

61 close(sfd);

62 close(cfd);

63 64 return 0;

65 }

1 #include 2 #include 3 #include 4 #include 5 #include 6 

7 #define serv_ip "127.0.0.1"

8 #define serv_port 9527

9 10 int main(void)

11 38

39 /*關閉鏈結*/

40 close(sfd);

41 42 return 0;

43 }

網路IPC 套接字

1.套接字是通訊端點的抽象。與應用程式要用檔案描述符訪問檔案一樣,訪問套接字也需要用套接字描述符。套接字描述符在unix系統是用檔案描述符實現的。要建立乙個套接字,可以呼叫socket函式。include int socket int domain,int type,int protocol 返回值...

UNIX 網路IPC套接字

unix高階環境程式設計 linux秉承著萬物皆檔案的思想,把套接字也弄成了以檔案描述符形式描述的的檔案。1.int socket int domain,int type,int protocol domain分af inet,af inet6,af unix,af upspec 未指定 type分...

APUE 網路IPC 套接字之套接字選項

套接字機制提供兩個套接字選項介面來控制套接字的行為。乙個介面用來設定選項,另乙個介面允許查詢乙個選項的狀態。可以獲取或設定的三種選項 1 通用選項,工作在所有套接字型別上。2 在套接字層次管理的選項,但是依賴於下層協議的支援。3 特定與某協議的選項,為每個協議所獨有。single unix spec...