tcp服務(wù)器異常情況-創(chuàng)新互聯(lián)

服務(wù)器提供回射服務(wù)(將客戶端發(fā)送的內(nèi)容回送到客戶端上) tcp服務(wù)器異常情況

1. 服務(wù)器沒有開啟回射服務(wù)

成都創(chuàng)新互聯(lián)專注于湖北網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供湖北營銷型網(wǎng)站建設(shè),湖北網(wǎng)站制作、湖北網(wǎng)頁設(shè)計、湖北網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造湖北網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供湖北網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

客戶端啟動tcpcli , 調(diào)用connect連接

那么在str_cli 里面的 一write socket 就會產(chǎn)生SIGPIPE這是因為connect連接服務(wù)器 服務(wù)器產(chǎn)生RST, 當(dāng)向一個接收了RST的套接口進行寫操作時

會產(chǎn)生SIGPIPE 此信號默認(rèn)終止進程。

所以客戶端啟動一個連接沒啟動該端口(服務(wù))的地址,客戶端輸入后會立刻返回

2. 服務(wù)器進程終止

服務(wù)器與客戶端正常連接后 在客戶端套接口沒有設(shè)置SO_KEEPALIVE時

服務(wù)器kill進程 tcpserv發(fā)送一個FIN給客戶端 客戶TCP返回ACK,但客戶進程現(xiàn)在阻塞與Fgets,無法得到終止信息

過些時候客戶端再輸入,write套接字,則引發(fā)服務(wù)器發(fā)送一個RST, 這里就分兩種情況了:

while(fgets()) // 讀入字符串

{

write();  //寫套接字

if(read() == 0)  //讀套接子

{ printf("server closed prematurely "); return ; }

else fputs(); //輸出回射字符串

}  

若在write之后立刻調(diào)用read, 則肯定會讀到FIN先,默認(rèn)為0, 則輸出服務(wù)器過早關(guān)閉 返回, 沒來得及讀入RST

但若在write 之后調(diào)用sleep,那么read時RST已經(jīng)返回到客戶端讀緩存中,此時RST優(yōu)于FIN, 則調(diào)用read會返回復(fù)位錯誤, errno = ECONNRESET

若 在read前面調(diào)用兩次write, 則第一次write引發(fā)RST,(可能要sleep一下等到RST到達客戶TCP),第二次write是對一個接受了RST的套接字寫操作,

則生成SIGPIPE,終止進程。

3.服務(wù)器主機崩潰

正常連接后服務(wù)器主機崩潰,客戶端向服務(wù)器發(fā)送數(shù)據(jù), 就阻塞與read調(diào)用,但客戶TCP一直重傳數(shù)據(jù)分解,想要得到一個ACK。

一般重傳12次,9分鐘之后才停止(若期間服務(wù)器還是沒有重啟)。read返回有可能是ETIMEOUT,或者EHOSTUNREACH

4.服務(wù)器主動關(guān)機

當(dāng)unix主動關(guān)機,init進程會發(fā)送SIGTERM給所有進程,等待進程清除和終止,然后就SIGKILL所有進程。這種情況就等于第二種,服務(wù)器進程關(guān)閉,

自動發(fā)送FIN。。。

5.服務(wù)器主機崩潰后重啟

之前連接的所有信息都會丟失,當(dāng)客戶進程write,服務(wù)器返回一個RST響應(yīng)(注意此時客戶沒有接受到FIN,因為崩潰的),客戶read調(diào)用

返回ECONNRESET錯誤。

當(dāng)前題目:tcp服務(wù)器異常情況-創(chuàng)新互聯(lián)
標(biāo)題來源:http://bm7419.com/article40/dsceeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、微信公眾號、靜態(tài)網(wǎng)站、面包屑導(dǎo)航、做網(wǎng)站、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)