《UNIX網路程式設計 卷1》 筆記 UNIX域協議

2021-08-01 17:09:12 字數 1424 閱讀 5837

unix域協議並不是乙個實際的協議族,而是在單個主機上客戶程序和伺服器程序之間通訊的一種方法。unix域使用的套接字結構如下:

struct sockaddr_un ;
int main(int argc, char **argv)

執行結果如下:

可以看到繫結的路徑名「/tmp/123」現在是乙個套接字檔案。

unix域提供了乙個特殊的函式socketpair,定義如下:

int socketpair(int family, int type, int protocol, int sv[2]);
引數family只能是af_local或af_unix,我們常使用這個函式指定type為sock_stream,protocol為0,在父子程序之間建立乙個全雙工的流管道。

使用unix域套接字的原因主要有兩點:

1. 在乙個主機上unix域套接字通訊速度往往比af_inet域套接字快。

2. unix域套接字可用於同乙個主機上兩個不同的程序間傳遞描述符。

本節我們展示使用unix域套接字的客戶/伺服器程式(忽略伺服器和客戶之間互動的str_cli、str_echo等函式)。

先定義兩個使用的路徑名:

#define	unixstr_path	"/tmp/unix.str"	/* unix domain stream */

#define unixdg_path "/tmp/unix.dg" /* unix domain datagram */

使用unix域tcp協議的回顯客戶程式

int main(int argc, char **argv)

使用unix域tcp協議的回顯伺服器程式

void sig_chld(int);

int main(int argc, char **argv)

if ((childpid = fork()) == 0)

close(connfd); }}

void sig_chld(int signo)

使用unix域udp協議的回顯客戶程式

int main(int argc, char **argv)

注意:**裡的注釋說明了unix域的udp客戶和tcp客戶之間的不同之處。

使用unix域udp協議的回顯伺服器程式

int main(int argc, char **argv)

《UNIX網路程式設計 卷1》 筆記 高階I O函式

本節我們關注稱為 高階i o 的各個函式和技術。首先是在i o操作上設定超時。在涉及套接字的i o操作上設定超時的方法有以下3種 1.呼叫alarm函式,在定時時間超時產生sigalrm訊號,打斷i o操作。首先我們給出要使用的signal1函式的實現,這個函式不是系統呼叫signal的包裹函式,而...

《UNIX網路程式設計 卷2》 筆記 管道

管道是最初的unix ipc形式,它的侷限性在於沒有名字,只能在有親緣關係的程序間使用。後來,fifo出現了,fifo也稱為有名管道。管道和fifo都使用read和write函式訪問。include int pipe int fd 2 管道由pipe函式建立,返回兩個描述符 fd 0 用來讀,fd ...

《UNIX網路程式設計 卷1》 筆記 描述符傳遞技術

linux提供了一種從乙個程序向另乙個程序傳遞任意開啟的描述符的技術,這兩個程序可以無親緣關係。這種技術要求首先在這兩個程序之間建立乙個unix域套接字,然後使用sendmsg跨套接字傳送乙個特殊的訊息,這個訊息由核心來處理,會把開啟的描述符傳遞到接收程序。先來看看要使用的資料結構和函式。struc...