socket accept()返回的socket描述符的端口和listen描述符端口是一樣的嗎?
as you know,一個socket是由一個五元組來唯一標(biāo)示的,即(協(xié)議,server_ip, server_port, client_ip, client_port)。只要該五元組中任何一個值不同,則其代表的socket就不同。這里忽略協(xié)議的區(qū)別,在同一協(xié)議的基礎(chǔ)上,服務(wù)器端的listen socket的端口可以看成(server_ip, server_port, ***, ***),其中***是通配符,它跟任何一個client_ip, client_port值都不同,可以簡單看成是(0,0)對,當(dāng)然實現(xiàn)不是這樣的。這樣在服務(wù)器端accept之后,返回的連接socket的四元組就是(server_ip, server_port, client_ip, client_port),這里的client_ip,client_port因連接的客戶端的不同而不同。所以accept返回的socket和listen socket是不同的,不同之處就在于四元組中的客戶端ip和port,而服務(wù)器端的server_ip和server_port還是相同的,也就是accpet()函數(shù)返回的新的socket描述符的端口和listen端口是一樣的。可以使用getsockname()函數(shù)來查看它們之間的不同。posted on 2012-07-15 21:01 MrRightLeft 閱讀(3900) 評論(2) 編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)編程