IO的方式有阻塞IO、非阻塞IO模型、IO複用、信號驅動、異步IO等。
1、阻塞IO模型
阻塞IO是最通用的IO類型,使用這種模型進行數據接收的時候,在數據沒有到之前程序會一直等待。內核會一直阻塞該請求直到有數據到來才返回。
2、非阻塞IO模型
當把套接字設置成非阻塞的IO,則對每次請求,內核都不會阻塞,會立即返回;當沒有數據的時候,會返回一個錯誤。
3、IO複用
使用IO複用模型可以在等待的時候加入超時的時間,當超時時間沒有到達的時候與阻塞的情況一致,而當超時時間到達仍然沒有數據接收到,系統會返回,不再等待。
4、信號驅動IO模型
信號驅動的IO在進程開始的時候註冊一個信號處理的回調函數,進程繼續執行,當信號發生時,即有了IO的時間,這裏即有數據到來,利用註冊的回調函數將到來的函數用recvfrom()接收。
5、異步IO模型
異步IO與前面的信號驅動IO相似,其區別在於信號驅動IO當數據到來的時候,使用信號通知註冊的信號處理函數,而異步IO則在數據複製完成的時候才發送信號通知註冊的信號處理函數,而異步IO則在數據複製完成的時候才發送信號通知註冊的信號處理函數。