1.每個socket關聯了兩個緩沖區,一個用於發送,一個用於接收。
2.
3.發送:(1)sendto()把數據放在sendbuf(緩沖區),通知os來取
(2)os在適當的時候過來取數據,並發到網絡
這意味着:存入數據和發送數據存在時間差(異步的),如果存入數據太快太多,緩沖區會滿
4. 接收:(1)os不停吧從網絡上接收數據,緩存在recvbuf里
(2)recvfrom從緩存區里接收數據
這意味着:不論你是否去取數據,os總是把數據收下來存好,recfrom是從recvbuf里取走現成的數據,如果不及時取走。則緩沖區滿
小結:發送和接收是一個異步過程
緩沖區滿的處理:
發送:
1)知道緩沖區有剩余空間(阻塞)
2)新發送的數據沒有存入緩沖區(直接丟掉)
接收:
1)新的數據不被接收
2)刪除緩沖區里的現有的數據,存放新的數據。
丟包對UDP來說是很正常,在使用UDP時就應該允許丟包
