EINTR錯誤的產生:當阻塞於某個慢系統調用的一個進程捕獲某個信號且相應信號處理函數返回時,該系統調用可能返回一個EINTR錯誤。例如:在socket服務器端,設置了信號捕獲機制,有子進程,當在父進程阻塞於慢系統調用時由父進程捕獲到了一個有效信號時,內核會致使accept返回一個EINTR錯誤(被中斷的系統調用)。
當碰到EINTR錯誤的時候,可以采取有一些可以重啟的系統調用要進行重啟,而對於有一些系統調用是不能夠重啟的。
例如:accept、read、write、select、和open之類的函數來說,是可以進行重啟的,accept函數出錯為Interrupted system call
不過對於套接字編程中的connect函數我們是不能重啟的,若connect函數返回一個EINTR錯誤的時候,我們不能再次調用它,否則將立即返回一個錯誤。針對connect不能重啟的處理方法是,必須調用select來等待連接完成。