socket 0的異常分析

2021-06-16 04:33:04 字數 900 閱讀 1518

首先看一下函式socket的定義:

(
int domain,               /* address family (for example, af_inet) */
int type,                 /* sock_stream, sock_dgram, or sock_raw */
int protocol              /* socket protocol (usually 0) */
)
/*returns
*a socket descriptor, or error
*/

socket()呼叫成功,返回socket descriptor,可以是從0~max;呼叫失敗,返回-1。

所以從函式定義上看,socket=0的情況完全可以發生。

然而我們在實際運動過程中,經常使用

這是因為通常情況下,socket返回的是大於0的情況,導致我們有一種經驗上的錯覺:socket總是大於0。

為什麼?

在linux系統中,

descriptor 0、1、2是三個特殊的描述符:

stdout = 1;
stderr = 2;

系統總是預設將0、1、2分配給這標準輸入輸出,所以,socket一般分配的值都不會是這三個。

假設,如果出現這種情況:

close(sockfd);         //close "socket" without check

sockfd 會等於什麼?由於錯誤操作,stdin被關閉了,這時就會出現socket=0的情況。

socket中的read返回0

在socket中伺服器與客戶端進行通訊,當其中一方呼叫close 即這一方會傳送乙個fin 關閉套接字之後,另一方read 會返回乙個0。我之前編寫的乙個伺服器與客戶端通訊 乙個伺服器只連線乙個客戶端 伺服器開兩個程序,乙個用於接收客戶端傳送的資料,另乙個程序用於 向客戶端傳送資料。客戶端開兩個程序...

Ajax status為0的丟擲異常

status為0的異常情況 1 url不存在 2 url不可到達 3 傳送了跨域請求 4 資料格式出錯 5 ajax在呼叫之前,就已經取消了。也就是說根本沒有呼叫這個ajax請求。6 ajax請求的方法報錯。ajax在呼叫之前被取消的情況 1.非同步請求時做了頁面location.reload 導致...

可惡的 0xc0000005異常

昨天快下班的時候自己寫的 突然跑出了這個異常,搞的我特別的無語,因為昨天女朋友要過來了,給我出現了這麼乙個bug,心裡很不爽,果斷低下班了,另外乙個原因就是公司其他人都跑了,每次基本都是我乙個人最後走,所以我也就離開了公司。今天上班後苦苦排查原因,總顯示只恨為空值,最終一無所獲,讓老大過來看 老大也...