[爆卦]socket程式是什麼?優點缺點精華區懶人包

為什麼這篇socket程式鄉民發文收入到精華區:因為在socket程式這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者james732 (好人超)看板C_and_CPP標題[問題] 關於socket程式與TCP觀念...


目前想要做一個測試:


當一個主機使用 listen, accept 等函式做為 TCP server 時

它同一個時間最多能建立幾個 TCP 連線呢?這個限制又是因為什麼?

對於不同的作業系統(ubuntu Linux, Windows)是否會有不同的表現?


server 端程式碼:http://nopaste.csie.org/65edc

用無窮迴圈不斷的接受連線,什麼事都不做,停留在 ESTABLISHED 狀態


client 端程式碼:http://nopaste.csie.org/c0da0

用無窮迴圈不斷的 connect,同樣的什麼都不做,停留在 ESTABLISHED 狀態


目前發現有兩個因素會限制連線的上限

ulimit -n : 單一 process 能使用的 File descriptor 上限

sysctl -w net.ipv4.ip_local_port_range="1024 65000" : 能用的 local port 範圍


不過對於目前測試的結果,有些狀況不太明白

1. 使用 netstat -n 觀察,server 端的 port 一律是使用 53764

http://james545.myweb.hinet.net/1.jpg

其實我不太懂為什麼都是同一個 port 呢?這麼多的 client 可以用同一個?


2. 我是這麼執行程式的:

server 端:./server 1234 ( server 監聽 TCP Port 1234 )

client 端:./client 1234 ( server 的 IP 寫死在程式裡, 連至 Port 1234 )

不過 client 大約建立六萬的連線後,就會發生錯誤訊息

connect: Cannot assign requested address

判斷是 client 自己的 local port 用盡了,即使再開啟另一個 process 也相同

這個時候就必須要再用另外一部電腦來測試了

有沒有辦法解決這個問題呢?


3. 要像這樣測試 TCP 連線的上限,還有沒有其他的辦法呢?

(譬如說現成的工具套件?)


4. 其實我一直不太能把 socket API 與 TCP/IP 的觀念很好的連結在一起

譬如說,我不懂 accept 與 connect 這兩個函式是怎麼搭配的

關於這個,有沒有比較好的參考資料呢?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
※ 編輯: james732 來自: 140.117.171.46 (04/09 04:58)
chingggg:4. 如果是 accept 與 connect 這兩個函式的搭配, 建議你 04/09 05:39
chingggg:看 UNIX Network Programming, Volume 1 04/09 05:39
chingggg:如果是 socket API 與 TCP/IP 的觀念搭配, 建議你看 04/09 05:40
chingggg:TCP/IP Illustrated, Volume 2: The Implementation 04/09 05:40
james732:vol1 有唸過了 vol2 買了好久都還沒有看 orz 04/09 05:41
chingggg:2, 3 請參照 TCP UDP 的 header format 04/09 05:46
chingggg:因為在 TCP/IP 裡面, port 就是用 16-bit 來表示, 2^16 = 04/09 05:47
chingggg:65536, 我想這就是你問題的解答 04/09 05:48
james732:我知道2的原因是受限於port數量 只是不知道能不能更多XD 04/09 09:39
james732:轉錄至看板 Programming 04/09 10:27
chingggg:我不敢保證一定不可以, 但是如果可以更多其實很奇怪. 04/09 11:01
chingggg:因為這是從 protocol 層面的不支持 04/09 11:02

你可能也想看看

搜尋相關網站