青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

Winsock 10053錯誤分析

轉載自:http://www.blogjava.net/pandawang/archive/2013/11/28/406922.html

 WSAGetLastError可能會返回10053錯誤,查msdn的解釋是:

WSAECONNABORTED 10053

Software caused connection abort.

An established connection was aborted by the software in your host computer, possibly due to a data transmission time-out or protocol error.

神馬?軟件原因造成的連接中斷,這是什么意思,不跟沒說一樣的么?
google一下唄

Berkeley description:

A connection abort was caused internal to your host machine. The software caused

a connection abort because there is no space on the socket’s queue and the socket

 cannot receive further connections.

       

WinSock description:

Partly the same as Berkeley. The error can occur when the local network system aborts

a connection. This would occur if WinSock aborts an established connection after data

retransmission fails  (receiver never acknowledges data sent on a datastream socket).

       

TCP/IP scenario:

A connection will timeout if the local system doesn’t receive an (ACK)nowledgement for

data sent.  It would also timeout if a (FIN)ish TCP packet is not ACK’d

(and even if the FIN is ACK’d, it will eventually timeout if a FIN is not returned).

 

伯克利說這種連接中斷是因為宿主機器的內部原因,因為軟件導致的連接中斷,可能是因為socket的隊列滿并且這個socket不能接收更多的連接了。
這還不如不說,越說越糊涂了。
winsocket的描述,似乎還靠譜一些,這種錯誤一般發生在一個建立的連接被重發失敗的情況下產生,接收方沒有響應數據發回來。但還是比較模糊。
再看看tcp ip標準文檔的說法,如果本地系統沒有收到發送數據的響應(ack)那么這連接就會超時。如果tcp的fin包沒有被ack(或者fin包被ack了但fin沒有返回)那么也會超時。但是,但是,超時跟這個10053有神馬關系?
再看后續的解釋:
從參考1中找到如下的描述:

The Scenario: 
An HTTP POST is to be sent to an HTTP server.
The server begins reading the POST and notices that the HTTP request header is invalid.
It immediately sends an HTTP response (with an error status, perhaps status=400) and closes the connection without trying to continue reading the remainder of the HTTP request that is forthcoming.

Meanwhile, the client is still happily writing the remainder of the HTTP request to the socket. (Remember a TCP/IP socket connection needs to be closed from both sides. In this case, the server has closed its side, but the client is still pumping data into the half-open connection.)
The client finishes writing the HTTP POST to the socket — meaning that data has been buffered to Winsock. The client application then tries to read the HTTP response, but it cannot because the outgoing retransmission (of the buffered data by WinSock) failed and the socket connection was shutdown on the client side (by Winsock). Even though the HTTP server sent the response, it is lost and cannot be retrieved. The error your application will receive when
trying to read the HTTP response on the socket is WSAECONNABORTED. The word "software" in any of the above error messages refers to "WinSock".

Go back and re-read the original error explanations. Hopefully, after that explanation, you’ll say "Aha! I understand what they’re talking about!".

 

啊哈,又有http了,大概意思就是http server收到請求了,但發現有問題,那么回一個http錯誤碼,然后就關閉了socket,但與此同時,client端還在很開心地向socket寫數據,注意哦,tcp是全雙工的。client寫完畢后,實際上數據只是放到了發送方的緩沖區中,不一定已經發出去了,如果寫得不好的程序,這個時候就開始從socket讀數據了,這時候就會產生一個WSACONNECTABORTED錯誤,windows上對應的就是10053錯誤。

但這個解釋實際上是不能讓人滿意的,只是舉出了一種場景,但為什么會產生還沒有解釋。后面又搜到了個參考2,首先解釋10053錯誤是收到fin后client會放棄發送緩沖區中的數據,同時上報錯誤。雖然說法還有點一頭霧水。

不過這兩個參考給我們一個思路,重現這個問題。

于是簡單寫個測試用的c-s程序,大概流程如下

 

 

圖1 CS程序簡化流程圖

這個簡單程序演示如何出現10053錯誤(以及10054錯誤)。

如果server在收到client發送的數據后立即關閉socket,那么client再讀時,會收到10053錯誤;如果server收到發送數據后,立即crash,那么隨后client再讀取時會收到10054錯誤。

ok,能夠重現場景了,那么我們來分析一下更細節的方面,網絡問題自然是抓包,本問題處理抓包還要看一下tcp的狀態以便輔助分析,我們在client端每次操作之前都打印當前的tcp狀態。

下面是client端發送記錄和對應的netstat情況

圖2 10053錯誤client端tcp狀態流轉

client在發送之前tcp狀態是established,在發送之后,server會立即關閉,tcp狀態也變為close_wait,但這只是單方向的關閉,client可以繼續發數據,但client發送后,server立即退出了,導致后續recv會失敗并且返回10053。對應抓包情況如下:



圖3 10053錯誤client端tcp抓包

整個通信過程如下:
1-3.三次握手建立連接
4.客戶端(10.10.86.93)向服務器端(10.10.86.98)發送數據,1字節
5.server 中止 發送fin(同時ack之前那個push)
6.client ack 那個fin
7.client再發送兩個字節
8.server此時已經關閉socket,屬于非正常情況,回復復位命令

整個過程可以重現10053情況,tcp發送分組數據的情況也一目了然,事情到此就可以了么?顯然不是,你也看到了后面還有很多文字,不知此時你心中的問題是否跟我一樣,先說我自己的吧,通過抓包發現這里的異常關閉有個reset,但reset一般是10054(Connection reset by peer)的錯誤,那么10053與10054的區別在哪里。要搞清楚問題也不難,重現場景抓包分析。
以下是修改上面的cs程序,在client發送的1字節包后,立即crash,這導致的問題是操作系統會立即回收所有資源,包括socket資源。




圖4 10054錯誤client端tcp狀態流轉

可以看到在crash之前這個tcp都是established狀態。crash之后,client端接收數據時會收到10054錯誤,場景重現了,我們再看一下抓包情況



圖5 10054錯誤client端tcp抓包

這個抓包情況跟10053很像,1-7也同10053,在8時,client收到server發過來的reset,表示當前連接被強制復位了。
對比10053和10054可以發現,如果srv返回fin標志后再reset那么對應的錯誤就是10053,如果直接reset就是10054錯誤。回過頭來在看參考2中的說法也就有點感覺了。

總結一下:
1.遇到不了解的問題,google是非常好的方法
2.對于一般問題,重現之很重要,可以反復發現問題并驗證問題。自己寫程序或者搭環境盡量重現。
3.網絡問題抓包是利器,包括各種工具的使用netstat wireshark ping traceroute等。
4.多重問題對比其中的差異,這里對比10053錯誤和10054錯誤。
5.理論基礎要搭好,本次問題主要是tcp的異常斷開問題,熟悉tcp斷開的半關閉和復位邏輯,不過理論還是理論,同樣是復位在不同場景下的錯誤碼不同。并且實現上也跟具體的操作系統相關。
6.實際工作中,
10053錯誤時,用戶主要是處于透明代理情況,那么這一般是又有用戶所在的代理服務器異常關閉導致的,可能跟我們的離線文件私有協議被用戶所在的代理服務器拒絕掉導致的。

7.回過頭來在看一開始的解釋,所謂軟件原因造成的連接終端,就是本例子中,server端在shoutdown本方向傳輸時,立即關閉了socket,導致本應該等待對方發送fin來完全結束的正常邏輯被打破,編程單方向強制中止本次tcp,導致client端之后向上報錯,就是所謂的10053錯誤了,這里的軟件就是server端的那個程序。(不過也有種說法是,客戶端發送錯誤數據,導致server端保護機制而強制關閉)


參考:

  1. http://www.chilkatsoft.com/p/p_299.asp   
  2. http://bbs.csdn.net/topics/360024280#post-361829232
  3. 《TCP/IP詳解(卷一)》18章 TCP連接的建立和中止

posted on 2015-04-08 15:05 楊粼波 閱讀(888) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线日韩中文字幕| 在线观看中文字幕不卡| 亚洲图中文字幕| 亚洲理伦电影| 欧美日韩一级视频| 亚洲欧美日韩综合一区| 亚洲一区日韩在线| 国产亚洲福利社区一区| 久久一日本道色综合久久| 久久免费黄色| 日韩视频免费在线观看| 亚洲精品视频在线观看网站| 国产精品国产精品国产专区不蜜| 亚洲影院色无极综合| 亚洲一区在线观看视频 | 亚洲人成网站在线播| 欧美成人福利视频| 亚洲一区在线免费| 欧美在线免费播放| 亚洲日韩第九十九页| 日韩一级精品| 国内精品久久久| 亚洲大片在线| 国产精品素人视频| 欧美~级网站不卡| 欧美日韩一区高清| 麻豆av福利av久久av| 欧美乱妇高清无乱码| 久久久精品国产免费观看同学 | 中国成人黄色视屏| 国产一区二区三区黄视频| 欧美韩日高清| 国产日韩欧美一区| 亚洲精品国精品久久99热一| 国产精品影音先锋| 亚洲大胆人体视频| 国产欧美日韩在线视频| 最新高清无码专区| 韩国福利一区| 国产精品99久久久久久白浆小说| 在线欧美不卡| 欧美亚洲三区| 亚洲一区二区三区在线| 欧美成人a视频| 久久精品日产第一区二区三区 | 欧美一区免费| 一本大道av伊人久久综合| 久久精品99久久香蕉国产色戒| 亚洲一区二区成人| 欧美激情精品久久久久久蜜臀 | 性xx色xx综合久久久xx| 女同一区二区| 免费不卡欧美自拍视频| 国产伦精品一区二区三区高清版| 亚洲精品久久久久久久久久久久| 精品av久久久久电影| 午夜视频精品| 欧美在线精品免播放器视频| 欧美日韩一区精品| 亚洲人体一区| 99re6热在线精品视频播放速度| 久久美女性网| 免费视频一区二区三区在线观看| 国产亚洲精品久久久| 亚洲永久网站| 久久gogo国模啪啪人体图| 国产精品美女在线| 亚洲一级在线| 欧美一级电影久久| 国产精品亚洲视频| 亚洲男人的天堂在线| 欧美一区国产二区| 国产午夜精品视频| 欧美在线播放一区二区| 久久精品国产精品亚洲精品| 国产亚洲精品美女| 久久精品亚洲精品| 欧美激情精品久久久久久变态| 亚洲国产婷婷香蕉久久久久久| 美女精品国产| 亚洲久久一区二区| 亚洲免费视频网站| 国产亚洲欧美另类一区二区三区| 欧美一区2区视频在线观看| 久久伊人精品天天| 亚洲欧洲视频在线| 欧美片在线观看| 亚洲伊人网站| 久久综合999| 日韩视频在线播放| 国产精品国产自产拍高清av| 亚洲欧美日韩区| 欧美成人69| 亚洲一二区在线| 国产一区二区日韩精品| 麻豆91精品| 国产精品99久久久久久久久久久久| 久久国产精品99精品国产| 在线精品视频在线观看高清| 欧美理论大片| 欧美一区二视频| 亚洲大片av| 欧美中文字幕精品| 亚洲精品在线观| 国产精品资源| 欧美成人激情视频免费观看| 亚洲一区二区三区四区中文| 嫩草国产精品入口| 午夜精品区一区二区三| 在线观看亚洲视频啊啊啊啊| 欧美日韩精品一区二区在线播放 | 一区二区三区精品视频| 久久中文久久字幕| 亚洲一区二区免费| 91久久极品少妇xxxxⅹ软件| 国产精品视频成人| 欧美精品免费播放| 久久精品国产清自在天天线| 亚洲日本欧美日韩高观看| 久久精品一区四区| 亚洲在线视频网站| 亚洲精选久久| 在线看国产日韩| 国产欧美精品va在线观看| 欧美激情精品久久久久久蜜臀 | 欧美中日韩免费视频| 99精品视频免费观看视频| 免费成人性网站| 久久久精品999| 午夜精品一区二区三区在线| 99精品视频网| 亚洲精品在线观| 亚洲国产精选| 曰韩精品一区二区| 国产资源精品在线观看| 国产精品亚洲综合一区在线观看 | 亚洲欧美激情四射在线日 | 久久久亚洲人| 欧美主播一区二区三区美女 久久精品人| 亚洲精品系列| 亚洲三级观看| 亚洲免费观看高清完整版在线观看| 伊人婷婷久久| 亚洲第一久久影院| 在线精品一区二区| 亚洲国产片色| 91久久久精品| 99re66热这里只有精品3直播| 亚洲毛片av| 99亚洲一区二区| 亚洲视频大全| 性欧美激情精品| 久久爱www久久做| 久久久久久有精品国产| 久久久999精品视频| 久久久伊人欧美| 欧美福利电影网| 欧美激情精品久久久久| 最近中文字幕mv在线一区二区三区四区| 亚洲国产精品久久久久秋霞不卡| 最新高清无码专区| 亚洲一级黄色片| 欧美一区2区三区4区公司二百| 久久国产精品亚洲77777| 久久久精品国产免费观看同学| 美日韩精品免费| 欧美网站在线| 国产色综合网| 最新热久久免费视频| 在线一区视频| 久久精视频免费在线久久完整在线看| 久久综合色播五月| 91久久国产自产拍夜夜嗨| 亚洲一区二区三区视频播放| 久久国产精品99国产| 欧美高清日韩| 国产欧美日韩在线视频| 亚洲激情国产| 欧美一区国产二区| 欧美阿v一级看视频| 日韩视频在线观看一区二区| 午夜精品福利电影| 欧美成人日韩| 国产视频一区在线| 亚洲欧洲另类国产综合| 亚洲欧美国产精品桃花| 免费不卡欧美自拍视频| 夜夜狂射影院欧美极品| 久久久久一区二区三区四区| 欧美三级视频在线| 一色屋精品视频在线观看网站| 99成人在线| 蜜臀久久99精品久久久画质超高清 | 欧美日韩亚洲一区二区三区| 国产午夜精品一区理论片飘花| 亚洲精品资源美女情侣酒店| 欧美影视一区| 99天天综合性| 女人天堂亚洲aⅴ在线观看| 国产日韩欧美麻豆|