unix-domain socket descriptor 請益 - Linux

Table of Contents

The Linux Programming Interface

裡面講解在同一個host 兩個processes用socket通訊,

Server:

.....略
sfd = socket(AF_UNIX, SOCK_STREAM, 0);
bind(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr_un));
cfd = accept(sfd, NULL, NULL);
while ((numRead = read(cfd, buf, BUF_SIZE)) > 0)

Client:
connect(sfd, (struct sockaddr *) &addr,sizeof(struct sockaddr_un));
write(sfd, buf, numRead);




accept()會回傳cfd這個新的descriptor來跟client的sfd進行連線。

想請問為什麼server端的sfd不能同時listen跟read/write,一定要在產一個新的cfd?
有沒有比較直觀的理解?

謝謝

--

All Comments

Regina avatarRegina2019-09-27
一個 server 可以有很多個 client,如果有下一個 client
進來,再呼叫一次 accept 就會有另外一個 cfd 出現。
Leila avatarLeila2019-09-29
再啦幹
Ethan avatarEthan2019-10-01
可是新的des並沒有綁路徑 為什麼連得到?
Madame avatarMadame2019-10-05
路徑已經在 sfd 設定過了,而 cfd 又是從 sfd 產生出來的
Hedwig avatarHedwig2019-10-10
不用再設定一次路徑其實很合理?
Annie avatarAnnie2019-10-13
也只能這樣想 不過具體是怎麼樣不清楚
Andy avatarAndy2019-10-16
為什麼你覺得用同一個 fd 會 work?
Valerie avatarValerie2019-10-17
變數名稱已經明確告訴你,accept產生的c(lient)fd是與被接
Dinah avatarDinah2019-10-21
受連線的client一一對應.不然你server面對多個client,要
Liam avatarLiam2019-10-23
如何分辨誰是誰?
Ophelia avatarOphelia2019-10-24
看你的描述,你應該是搞反了s和c,s(erver)fd是server這半
Eden avatarEden2019-10-28
邊的代表,accept後接受某個新client後才產生對應該client
的cfd
Joseph avatarJoseph2019-10-30
client那半的sfd,則是指明要連線的對方server資訊(IP,por
t)等
^程式
Selena avatarSelena2019-11-04
不懂 socket 的話, 把 server client 分成兩隻寫比較好懂