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?
有沒有比較直觀的理解?
謝謝
作者:
bitlife (BIT一生)
2019-09-24 23:50:00變數名稱已經明確告訴你,accept產生的c(lient)fd是與被接受連線的client一一對應.不然你server面對多個client,要如何分辨誰是誰?看你的描述,你應該是搞反了s和c,s(erver)fd是server這半邊的代表,accept後接受某個新client後才產生對應該client的cfdclient那半的sfd,則是指明要連線的對方server資訊(IP,port)等^程式
作者: dou0228 (7777) 2019-09-28 23:29:00
不懂 socket 的話, 把 server client 分成兩隻寫比較好懂