Linux socket編程
基本流程
準備階段
Server
1. 調用socket函數,創建某一類型的socket
2. 調用listen函數,設置傾聽隊列的長度,爲接受來自client的請求做準備
3. 調用accept函數,開始在所綁定的端口傾聽來自client端的連接請求
如果socket被設置爲阻塞,那麼accept將被阻塞,進程被掛起,直到有client連接
Client
1. 調用socket函數,創建某一類型(和server一樣)的socket
2. 調用connect函數,向server發起連接請求
連接的報文包含了client端的初始的序號SYN a 和 MSS=1460信息(最大數據段的大小)
server接收到client的連接請求後,server從accept函數返回,server向client發送server端的初始序號SYN b,和對client端的SYN a的確認ACK=a+1,還有最大數據段大小 MSS
client接收到server的迴應時,將發出對server請求的迴應ACK=b+1。然後client從connect函數中返回
server接收到client端響應時,從accept函數返回
發送數據階段
雙方使用write將要發送的數據寫到TCP緩衝區,read從TCP緩衝區讀出
關閉連接
雙方發送完數據後,close關閉socket描述符
client調用close函數,client的TCP層發送FIN控制信息的數據段,server端接收到client的FIN關閉連接請求,對client端的FIN的確認,server端的讀管道被關閉,從這個TCP連上的read將返回0。
server調用close函數,發送關閉請求FIN,client發送確認信息,進入CLOSE狀態,server接收到確認信息,server進入CLOSE狀態,此時連接關閉。