unix-domain socket descriptor 請益 - Linux

Poppy avatar
By Poppy
at 2019-09-24T18:04

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?
有沒有比較直觀的理解?

謝謝

--
Tags: Linux

All Comments

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

ubuntu 16.04外接螢幕內縮(無法全屏)

Rebecca avatar
By Rebecca
at 2019-09-23T13:59
我把筆電剛安裝ubuntu 16.04 也用intel graphic update tool更新過 linux-image-extra相關的package也安裝了 但是接上外接螢幕之後 只要調整成較差的解析度 螢幕就會內縮無法全屏 只有在外接螢幕有這個問題 本機的螢幕調整後都一樣全屏 不管是用sy ...

Ubuntu16.04滑鼠右鍵在桌面失靈

Oscar avatar
By Oscar
at 2019-09-22T17:21
如題 我無法在桌面使用右鍵開啟選單 筆電的觸控版也沒辦法 之前都還行 突然之間就壞了 網路上的方法也失敗 想請各位幫幫我 - ...

Linux系統上看PPT(PowerPoint)

Carol avatar
By Carol
at 2019-09-21T14:43
各位大大您們好 如題,我希望可以在 Linux 上閱讀 PPT 。 目前我嘗試過使用 Libre ,但是效果不佳... 因為打開來一些字會跑版,甚至根本出不來(數學式)。 不過如果我把 PPT 上傳到 Google 雲端後,可以正常閱讀。 所以我想應該會有某種更方便的作法可以達成著個目標。 ...

想在raspberry pi 架設minecraft 伺服器

Robert avatar
By Robert
at 2019-09-20T18:37
我是原po 本來在發文後一天就在amazon 訂了4GB 版本,結果賣家臨時說缺貨,到8月底還是沒消息, 最後還是退款了(還賠了20港幣手續費,幹) 同時香港也只有1、2GB版本有存貨=.=,終於在4天前買到了 找了幾位朋友做測試 先用ubuntu 跑bukkit 1.14.3,開服之後2~3分鐘伺服器必定 ...

awk查詢access.log問題

Quintina avatar
By Quintina
at 2019-09-20T17:33
※ 引述《angle065 (Fu)》之銘言: : 大家好,小弟有個問題想請教,因為想直接查詢出access.log不重複的ip : 查到可以利用這個指令去查 : awk and#39;{tmp[$1]} END {for (i in tmp) print i}and#39; access.log : 這邊有 ...