UNIX 網路IPC套接字

2021-08-20 01:46:48 字數 1191 閱讀 4438

《unix高階環境程式設計》

linux秉承著萬物皆檔案的思想,把套接字也弄成了以檔案描述符形式描述的的檔案。

1.int socket(int domain,int type,int protocol)

domain分af_inet,af_inet6,af_unix,af_upspec(未指定)。

type分sock_dgram(udp),sock_stream(tcp),sock_raw(ip),sock_seqpacket(報文)。

要對socket進行操作在函式內部使用fd即可。

2.htonl,htons,ntohl,ntohs

h代表網路位元組序,n代表本地位元組序,l代表32位,s代表16位。包含在中。

3.位址格式sockaddr_in不多說,位址族,埠,ipv4或v6位址。

inet_ntop將二進位制轉為文字字串格式,inet_pton相反。

網路配置資訊存放處:/etc/hosts和/etc/services等。

5.將套接字與位址關聯

bind()函式用來關聯套接字和位址。

getsockname()函式來發現繫結到套接字上的位址。

getpeername()函式來發現與套接字相連的對等方的位址。

6.建立連線及資料傳輸

tcp:listen()、accept()、connect()、send()、recv()、close()。

udp:sendto()、recvfrom()。

accept可以替換為poll()、select()、epoll()。那就是另乙個故事了,多執行緒系列,reactor和proactor非同步處理模式。

alarm()函式,避免丟包或socket_error等造成的無限期阻塞,還有fcntl。

7.帶外資料:

乙個位元組的緊急訊號,優先處理。fcntl中使用f_setown確定套接字所有權,訊號是**發來的。

對了我按照書上的理解是訊號在核心中產生儲存在pcb棧中,在返回到使用者態時才進行解決,並不會一有訊號產生就去解決。核心有忽略,終止等選項,使用者自定義的訊號也是在返回時處理,除非是kill這種。

8.非阻塞和非同步io(套接字的i/o是基於訊號的i/o)

a.通知套接字建立所有權,這樣訊號可以被傳遞到合適的程序。

b.當io不阻塞時通過套接字發訊號。

套接字需要與程序繫結,這樣才知道哪個套接字對應哪個程序。傳輸相應的訊號sigio。

unix域套接字 IPC

沒用過域套接字,一般都用管道來進行程序通訊,不過聽說域套接字比管道好。就試試吧。域套接字在socket函式建立的時候,第二個字段,可以是sock stream,也可以是sock dgram。可是在用sock dgram建立接收端的時候,我發現,它可以不用listen和accept過程,直接接收就可以...

網路IPC 套接字

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

網路IPC 套接字

套接字描述符 includeint socket int domain,int type,int prootocol 返回值 若成功,返回檔案 套接字 描述符,若出錯,返回 1域 描述af inet ipv4 網際網路域 af inet6 ipv6網際網路域 af unix unix域 af ups...