套接字程式設計之localsocket

2021-06-22 14:55:25 字數 1552 閱讀 3968

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 通訊完全是非同步的。客戶機 伺服器模式在操作過程中採取的是主動請示方式 首先伺服器方要先啟動,並根據請示提供相應服務 ...