天天看點

UNIX本地套接字的使用

程序間通信的一種方式是使用UNIX套接字,人們在使用這種方式時往往用的不是網絡套接字,而是一種稱為本地套接字的方式。這樣做可以避免為黑客留下後門。

建立

使用套接字函數socket建立,不過傳遞的參數與網絡套接字不同。域參數應該是PF_LOCAL或者PF_UNIX,而不能用PF_INET之類。本地套接字的通訊類型應該是SOCK_STREAM或SOCK_DGRAM,協定為預設協定。例如:

 int sockfd;

 sockfd = socket(PF_LOCAL, SOCK_STREAM, 0);

綁定

建立了套接字後,還必須進行綁定才能使用。不同于網絡套接字的綁定,本地套接字的綁定的是 struct sockaddr_un結構。struct sockaddr_un結構有兩個參數:sun_family、sun_path。sun_family隻能是AF_LOCAL或AF_UNIX,而 sun_path是本地檔案的路徑。通常将檔案放在/tmp目錄下。例如:

 struct sockaddr_un sun;

 sun.sun_family = AF_LOCAL;

 strcpy(sun.sun_path, filepath);

 bind(sockfd, (struct sockaddr*)&sun, sizeof(sun));

監聽

本地套接字的監聽、接受連接配接操作與網絡套接字類似。

連接配接

連接配接到一個正在監聽的套接字之前,同樣需要填充struct sockaddr_un結構,然後調用connect函數。

連接配接建立成功後,我們就可以像使用網絡套接字一樣進行發送和接受操作了。甚至還可以将連接配接設定為非阻塞模式,這裡就不贅述了。