UNIX 域套接字
unix域套接字,使用socket相同的接口,用於進程間通信
但它僅僅進行數據複製,不添加報頭,不計算校驗和
unix域套接字,在系統中創建兩個文件,文件不實際存儲數據,指向內核空間中相應地址!
使用socketpair創建一個類似於管道的socketfd fd[2],不同於管道,此管道是全雙工的,在fd 0,1上可寫可讀!
int socketpair(int domain, int type, int protocol, int sockfd[2]);
匿名的,全雙工的文件描述符填充到sockfd中
成功返回0,失敗返回-1
匿名的un socket只能在有親緣關係的進程中方能使用
使用sockaddr_un 指定文件地址,綁定socket文件描述符可以是不同進程見通信,通過文件名索引到通信管道
在綁定同一文件,若文件存在,則綁定失敗,保證一個文件與一個fd綁定,隱含意思即文件標識地址
在套接字關閉文件不會刪除,需自行關閉文件!
struct sockaddr_un
{
int sun_family;
char sun_path[108];//文件路徑
};
sockadd的地址長度爲famil長度 + 路徑字符串實際長度
so socklen = offset(struct socketaddr_un, sun_path) + strlen(unaddr.sunpath);