socket在什麼情況下可讀可寫

2021-08-21 07:31:43 字數 1070 閱讀 5765

一、下列四個條件中的任何乙個滿足時,socket準備好讀:

1.socket接收緩衝區中已經接收的資料的位元組數大於等於socket接收緩衝區低潮限度的當前值;對這樣的socket的讀操作不會阻塞,並返回乙個大於0的值(即:準備好讀入的資料的位元組數).我們可以用socket選項so_rcvlowat來設定此低潮限度,對於tcp和udpsocket,其預設值為1; 

2.連線的讀這一半關閉(即:接收到對方發過來的fin的tcp連線).對於這樣的socket的讀操作將不阻塞,並且返回0(即:檔案結束符,fin包體長度為0位元組); 

3.socket是乙個用於監聽的socket,並且已經完成的連線數為非0.這樣的soocket處於可讀狀態,是因為socket收到了對方的connect請求,執行了三次握手的第一步:對方傳送syn請求過來,使監聽socket處於可讀狀態;正常情況下,這樣的socket上的accept操作不會阻塞; 

4.有乙個socket有異常錯誤條件待處理.對於這樣的socket的讀操作將不會阻塞,並且返回乙個錯誤(-1),errno則設定成明確的錯誤條件.這些待處理的錯誤也可通過指定socket選項so_error呼叫getsockopt來取得並清除; 

二、下列三個條件中的任何乙個滿足時,socket準備好寫

1.socket傳送緩衝區中的可用空間位元組數大於等於socket傳送緩衝區低潮限度的當前值,且(i):socket已連線(tcp socket),或者(ii):socket不要求連線(如:udp socket).這意味著,如果我們將這樣的socket設定為非阻塞模式,寫操作將不會阻塞,並且返回乙個正值(如:由傳輸層接收的位元組數).我們可以用socket選項so_sndlowat來設定此低潮限度,對於tcp和udp socket,其預設值一般是2048bytes; 

2.連線的寫這一半關閉.對於這樣的socket的的寫操作將產生訊號sigpipe; 

3.有乙個socket異常錯誤條件待處理.對於這樣的socket的寫操作將不會阻塞並且返回乙個錯誤(-1),errno則設定成明確的錯誤條件.這些待處理的錯誤也可以通過指定socket選項so_error呼叫getsockopt函式來取得並清除;

socket什麼情況下可讀

一 下列四個條件中的任何乙個滿足時,socket準備好讀 1.socket接收緩衝區中已經接收的資料的位元組數大於等於socket接收緩衝區低潮限度的當前值 對這樣的socket的讀操作不會阻塞,並返回乙個大於0的值 即 準備好讀入的資料的位元組數 我們可以用socket選項so rcvlowat來...

layoutSubviews在什麼情況下呼叫

1.在以下情況都會呼叫 注意 當view的size的值為0的時候,addsubview也不會呼叫layoutsubviews。當要給這個view新增子控制項的時候不管他的size有沒有值都會呼叫 2.先來看一下uiview的layoutsubviews在什麼情況下會呼叫 subview view s...

python 在什麼情況下 rmul

在自定義列表mylist之後 3 mylist 報錯,mylist已經過載了 但是3沒有,這時同學告訴我可用 rmul 說我有乙個列表l。在什麼情況下l rmul 自我,其他 叫?我基本上理解了文件,但我也想看到乙個例子,澄清它的用法,毫無疑問。當python試圖乘以兩個物件時,它首先嘗試呼叫左物件...