1. 程式人生 > >linux C 面試筆試常見題

linux C 面試筆試常見題

2/TCP/IP通訊阻塞和非阻塞? 
阻塞:當socket的接收緩衝區中沒有資料時,read呼叫會一直阻 
塞住,直到有資料到來才返回。當socket緩衝區中的資料量小於期望讀取 
的資料量時,返回實際讀取的位元組數。當socket的接收緩衝區中的資料大於 
期望讀取的位元組數時,讀取期望讀取的位元組數,返回實際讀取的長度。 
非阻塞:socket的接收緩衝區中有沒有資料,read呼叫都會立刻返回。接收 
緩衝區中有資料時,與阻塞socket有資料的情況是一樣的,如果接收緩衝區 
中沒有資料,則返回錯誤號為EWOULDBLOCK,表示該操作本來應該阻塞的,但 
是由於本socket為非阻塞的socket,因此立刻返回,遇到這樣的情況,可 

以在下次接著去嘗試讀取。如果返回值是其它負值,則表明讀取錯誤。 
因此,非阻塞的rea呼叫一般這樣寫: 
if ((nread = read(sock_fd, buffer, len)) < 0) 

if (errno == EWOULDBLOCK) 

return 0; //表示沒有讀到資料 

else 
return -1; //表示讀取失敗