2 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
描述符都是本地的概念,它的值只是內(nèi)核文件系統(tǒng)中對(duì)socket/sock數(shù)據(jù)結(jié)構(gòu)的一個(gè)"別稱"而已。創(chuàng)建socket時(shí),內(nèi)核創(chuàng)建socket/sock數(shù)據(jù)結(jié)構(gòu),并返回給你一個(gè)fd。以后你用這個(gè)fd進(jìn)行 send或者recv,內(nèi)核才能找到時(shí)哪個(gè)socket。
(個(gè)人感覺(jué)這里的cfd是否就可以理解是保存了客戶端的地址信息,相當(dāng)于客戶端的套接字?)也就是說(shuō)這里讀寫(xiě)時(shí)使用的是對(duì)方的套接字進(jìn)行讀寫(xiě)的?
cfd是屬于Server的套接字描述符,只是它對(duì)應(yīng)的套接字保存了通信雙方的信息,只能說(shuō)是連接到client的套接字
客戶端如果沒(méi)有給套接字使用bind,操作系統(tǒng)會(huì)自動(dòng)分配地址信息綁定到這個(gè)套接字上,那就說(shuō)明客戶端中的fd依然是客戶端自身的套接字?
Bind 就是手動(dòng)指定為一個(gè)套接字指定本端地址信息(比如IP和port)。一般Clinet不關(guān)心自己使用的端口號(hào),所以一般Clinet不用Bind,實(shí)在要Bind也沒(méi)啥問(wèn)題,只要不要和已有的沖突就行。
另外,關(guān)于
在服務(wù)端編程時(shí),會(huì)創(chuàng)建兩個(gè)文件描述符sfd和cfd,其中sfd用來(lái)綁定服務(wù)端的地址信息,后面調(diào)用accept的時(shí)候,使用的實(shí)參是sfd,返回給了cfd
sfd是監(jiān)聽(tīng)(listen)套接字,accept返回的cfd是子連接,本端信息繼承sfd,對(duì)端信息來(lái)源于對(duì)端的SYN報(bào)文
添加回答
舉報(bào)