unix domain socket ipc
使用unix domain socket的過程和網路socket十分相似,也要先呼叫socket()建立乙個socket檔案描述符,address family指定為af_unix,type可以選擇sock_dgram或sock_stream,protocol引數仍然指定為0即可。
unix domain socket與網路socket程式設計最明顯的不同在於位址格式不同,用結構體sockaddr_un表示,網路程式設計的socket位址是ip位址加埠號,而unix domain socket的位址是乙個socket型別的檔案在檔案系統中的路徑,這個socket檔案由bind()呼叫建立,如果呼叫bind()時該檔案已存在,則bind()錯誤返回。
#define unix_path_max 108
struct sockaddr_un while (0)
void echo_ser(int conn)
else if (n == 0)
recvbuf[n] = 0;
printf("recv:%s\n", recvbuf);
fputs(recvbuf, stdout);
write(conn, recvbuf, strlen(recvbuf));
}close(conn);
}/* unix domain socket與tcp套接字相比較,在同一臺主機的傳輸速度前者是後者的兩倍。*/
int main(void)
pid = fork();
if (pid == -1)
err_exit("fork error");
if (pid == 0)
close(conn);
}return 0;
}client.c
#include#include#include#include#include#include#include#include#include#include#include#include#define namespace "/data/test_socket"
#define err_exit(m) \
do while (0)
void echo_cli(int conn)
; char recvbuf[1024] = ;
int i, readlen;
for(i=0; i<100; i++)
else
printf("echo:%s\n", recvbuf);
sleep(1);
}close(conn);
}int main(void)
unix域套接字程式設計注意:
1、bind成功將會建立乙個檔案,許可權為0777 & ~umask
2、sun_path最好用乙個絕對路徑
3、unix域協議支援流式套介面與報式套介面
4、unix域流式套接字connect發現監聽佇列滿時,會立刻返回乙個econnrefused,這和tcp不同,如果監聽佇列滿,會忽略到來的syn,這導致對方重傳syn。
C 程式設計之Socket套接字程式設計
一.什麼是socket?網路上的兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端稱為乙個socket。建立網路通訊連線至少要一對埠號 socket socket本質是程式設計介面 api 對tcp ip的封裝,tcp ip也要提供可供程式設計師做網路開發所用的介面,這就是socket程式...
Winsocket程式設計之套接字原理
在tcp ip網路中兩個程序間的相互作用的主機模式是客戶機 伺服器模式.一 客戶機 伺服器模式在tcp ip網路中兩個程序間的相互作用的主機模式是客戶機 伺服器模式 client server model 該模式的建立基於以下兩點 1 非對等作用 2 通訊完全是非同步的。客戶機 伺服器模式在操作過程...
Winsocket程式設計之套接字原理
一 客戶機 伺服器模式 在tcp ip網路中兩個程序間的相互作用的主機模式是客戶機 伺服器模式 client server model 該模式的建立基於以下兩點 1 非對等作用 2 通訊完全是非同步的。客戶機 伺服器模式在操作過程中採取的是主動請示方式 首先伺服器方要先啟動,並根據請示提供相應服務 ...