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

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

IOCP使用時常見的幾個錯誤

Posted on 2009-09-12 13:17 S.l.e!ep.¢% 閱讀(1965) 評論(0)  編輯 收藏 引用 所屬分類: IOCP

IOCP使用時常見的幾個錯誤

Posted on 2009-09-12 00:20 Fox 閱讀(25) 評論(0) ?編輯?收藏引用

本文同步自游戲人生

在使用IOCP時,最重要的幾個API就是GetQueueCompeltionStatus、WSARecv、WSASend,數據的I/O及其完成狀態通過這幾個接口獲取并進行后續處理。

GetQueueCompeltionStatus attempts to dequeue an I/O completion packet from the specified I/O completion port. If there is no completion packet queued, the function waits for a pending I/O operation associated with the completion port to complete.

						BOOL WINAPI GetQueuedCompletionStatus(
  __in   HANDLE CompletionPort,
  __out  LPDWORD lpNumberOfBytes,
  __out  PULONG_PTR lpCompletionKey,
  __out  LPOVERLAPPED *lpOverlapped,
  __in   DWORD dwMilliseconds
);
				

If the function dequeues a completion packet for a successful I/O operation from the completion port, the return value is nonzero. The function stores information in the variables pointed to by the lpNumberOfBytes, lpCompletionKey, and lpOverlapped parameters.

除了關心這個API的in & out(這是MSDN開頭的幾行就可以告訴我們的)之外,我們更加關心不同的return & out意味著什么,因為由于各種已知或未知的原因,我們的程序并不總是有正確的return & out。

If *lpOverlapped is NULL and the function does not dequeue a completion packet from the completion port, the return value is zero. The function does not store information in the variables pointed to by the lpNumberOfBytes and lpCompletionKey parameters. To get extended error information, call GetLastError. If the function did not dequeue a completion packet because the wait timed out, GetLastError returns WAIT_TIMEOUT.

假設我們指定dwMilliseconds為INFINITE。

這里常見的幾個錯誤有:

WSA_OPERATION_ABORTED (995): Overlapped operation aborted.

由于線程退出或應用程序請求,已放棄I/O 操作。

MSDN: An overlapped operation was canceled due to the closure of the socket, or the execution of the SIO_FLUSH command in WSAIoctl. Note that this error is returned by the operating system, so the error number may change in future releases of Windows.

成因分析:這個錯誤一般是由于peer socket被closesocket或者WSACleanup關閉后,針對這些socket的pending overlapped I/O operation被中止。

解決方案:針對socket,一般應該先調用shutdown禁止I/O操作后再調用closesocket關閉。

嚴重程度輕微易處理

WSAENOTSOCK (10038): Socket operation on nonsocket.

MSDN: An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.

成因分析:在一個非套接字上嘗試了一個操作。

使用closesocket關閉socket之后,針對該invalid socket的任何操作都會獲得該錯誤。

解決方案:如果是多線程存在對同一socket的操作,要保證對socket的I/O操作邏輯上的順序,做好socket的graceful disconnect。

嚴重程度輕微易處理

WSAECONNRESET (10054): Connection reset by peer.

遠程主機強迫關閉了一個現有的連接。

MSDN: An existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, the host or remote network interface is disabled, or the remote host uses a hard close (see setsockopt for more information on the SO_LINGER option on the remote socket). This error may also result if a connection was broken due to keep-alive activity detecting a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET.

成因分析:在使用WSAAccpet、WSARecv、WSASend等接口時,如果peer application突然中止(原因如上所述),往其對應的socket上投遞的operations將會失敗。

解決方案:如果是對方主機或程序意外中止,那就只有各安天命了。但如果這程序是你寫的,而你只是hard close,那就由不得別人了。至少,你要知道這樣的錯誤已經出現了,就不要再費勁的繼續投遞或等待了。

嚴重程度輕微易處理

WSAECONNREFUSED (10061): Connection refused.

由于目標機器積極拒絕,無法連接。

MSDN: No connection could be made because the target computer actively refused it. This usually results from trying to connect to a service that is inactive on the foreign host—that is, one with no server application running.

成因分析:在使用connect或WSAConnect時,服務器沒有運行或者服務器的監聽隊列已滿;在使用WSAAccept時,客戶端的連接請求被condition function拒絕。

解決方案:Call connect or WSAConnect again for the same socket. 等待服務器開啟、監聽空閑或查看被拒絕的原因。是不是長的丑或者錢沒給夠,要不就是服務器拒絕接受天價薪酬自主創業去了?

嚴重程度輕微易處理

WSAENOBUFS (10055): No buffer space available.

由于系統緩沖區空間不足或列隊已滿,不能執行套接字上的操作。

MSDN: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.

成因分析:這個錯誤是我查看錯誤日志后,最在意的一個錯誤。因為服務器對于消息收發有明確限制,如果緩沖區不足應該早就處理了,不可能待到send/recv失敗啊。而且這個錯誤在之前的版本中幾乎沒有出現過。這也是這篇文章的主要內容。像connect和accept因為緩沖區空間不足都可以理解,而且危險不高,但如果send/recv造成擁堵并惡性循環下去,麻煩就大了,至少說明之前的驗證邏輯有疏漏。

WSASend失敗的原因是:The Windows Sockets provider reports a buffer deadlock. 這里提到的是buffer deadlock,顯然是由于多線程I/O投遞不當引起的。

解決方案:在消息收發前,對最大掛起的消息總的數量和容量進行檢驗和控制。

嚴重程度嚴重

本文主要參考MSDN

************* 說明 *************

Fox只是對自己關心的幾個錯誤和API參照MSDN進行分析,不提供額外幫助。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩免费在线视频| 亚洲欧美激情一区| 欧美高清视频一二三区| 久久精品二区| 久久久噜噜噜久久中文字幕色伊伊| 中文在线资源观看网站视频免费不卡| 91久久极品少妇xxxxⅹ软件| 狼狼综合久久久久综合网| 久久久之久亚州精品露出| 久久久久久999| 蜜臀av国产精品久久久久| 亚洲国产高清视频| 一区二区三区精品视频在线观看| 一区二区三区欧美| 欧美一区午夜视频在线观看| 久久久久久久久久看片| 欧美电影美腿模特1979在线看| 欧美国产1区2区| 男女精品视频| 欧美性猛交xxxx乱大交蜜桃| 国产日韩一区二区| 亚洲国产精品成人综合| 一本色道88久久加勒比精品| 亚洲永久精品大片| 久久一区中文字幕| 99国内精品| 久久精品国产清自在天天线| 欧美精品日日鲁夜夜添| 国产色产综合产在线视频| 亚洲精美视频| 久久久午夜电影| 日韩亚洲成人av在线| 久久久999精品视频| 欧美午夜精品久久久| 在线观看日韩欧美| 久久成人精品| 日韩小视频在线观看| 狂野欧美激情性xxxx欧美| 国产精品亚洲а∨天堂免在线| 亚洲美女在线观看| 葵司免费一区二区三区四区五区| 一本大道av伊人久久综合| 老司机一区二区三区| 国产亚洲高清视频| 亚洲欧美日韩成人高清在线一区| 欧美激情久久久久| 久久青草欧美一区二区三区| 国产深夜精品| 亚洲一区二区欧美日韩| 欧美激情视频在线播放| 国产精品美女主播| 一本大道久久a久久精品综合| 六月婷婷久久| 欧美在线日韩精品| 国产亚洲福利社区一区| 欧美有码在线视频| 亚洲欧美一区二区三区在线| 国产精品久久久久久久久| 99视频在线观看一区三区| 亚洲成色777777在线观看影院| 欧美专区中文字幕| 国产一在线精品一区在线观看| 亚洲视频精品在线| 日韩亚洲欧美一区二区三区| 免费一级欧美在线大片| 激情伊人五月天久久综合| 国产午夜亚洲精品不卡| 亚洲欧美www| 在线视频欧美一区| 欧美日韩的一区二区| 中文国产一区| 最新成人av网站| 欧美视频在线免费| 日韩一级大片在线| 一本在线高清不卡dvd| 欧美日韩国产在线看| 亚洲在线中文字幕| 一本色道久久综合精品竹菊 | 一区二区三区日韩在线观看| 久久久国产精品一区二区中文| 在线精品视频免费观看| 久久激情综合网| 久久艳片www.17c.com| 伊人久久亚洲影院| 亚洲激情在线激情| 欧美日韩精品一区二区| 亚洲免费婷婷| 亚洲欧美国产高清| 亚洲国产国产亚洲一二三| 欧美激情精品久久久久久久变态| 欧美日韩国产综合视频在线观看中文 | 91久久视频| 国产精品久久久久久久一区探花| 一个色综合av| 久久精品国产第一区二区三区| 伊人久久亚洲影院| 中文无字幕一区二区三区| 国产精品美女久久久久aⅴ国产馆| 久久精品导航| 鲁鲁狠狠狠7777一区二区| 亚洲性感美女99在线| 亚洲欧美日韩天堂| 亚洲韩国精品一区| 国产视频一区二区在线观看| 香蕉久久一区二区不卡无毒影院| 午夜欧美不卡精品aaaaa| 欧美日韩国产成人在线| 久久影院午夜论| 欧美黑人国产人伦爽爽爽| 久久国内精品视频| 老巨人导航500精品| 欧美一区二区三区婷婷月色| 久久久久国产一区二区三区| 亚洲一区美女视频在线观看免费| 久久久久久久999精品视频| 一本到高清视频免费精品| 久久久综合精品| 亚洲欧美激情一区| 欧美日韩精品在线观看| 久久天堂精品| 国产日韩欧美麻豆| 日韩午夜高潮| 一区二区国产日产| 久久精彩免费视频| 午夜在线精品偷拍| 欧美精品一区二区三区高清aⅴ| 另类欧美日韩国产在线| 国产精品日本精品| 在线视频日韩精品| 日韩一本二本av| 欧美福利视频网站| 男女激情视频一区| 亚洲成在线观看| 亚洲欧美资源在线| 欧美一区久久| 国产精品久久久久久久久搜平片| 日韩一区二区电影网| 永久免费毛片在线播放不卡| 欧美中日韩免费视频| 亚洲免费视频在线观看| 欧美性猛交xxxx乱大交蜜桃| 亚洲黑丝在线| 99精品99| 欧美.日韩.国产.一区.二区| 欧美激情第六页| 黄色国产精品| 老**午夜毛片一区二区三区| 久久久免费精品视频| 一区精品在线| 欧美在线一二三四区| 久久久国产精品亚洲一区| 国产精品久久亚洲7777| 一区二区三区精品久久久| 一本色道久久综合亚洲精品高清| 麻豆精品在线观看| 欧美黄色片免费观看| 国产精品视频一| 欧美中文字幕不卡| 美女精品在线| 亚洲黄页一区| 欧美午夜一区二区| 亚洲午夜国产成人av电影男同| 久久国产一区二区| 极品av少妇一区二区| 欧美久久婷婷综合色| 亚洲男女毛片无遮挡| 久久久久久久综合| 91久久久在线| 欧美日韩ab| 久久精品官网| 亚洲精品系列| 亚洲一区精品在线| 欧美影院精品一区| 红桃视频一区| 亚洲永久免费| 欧美成人乱码一区二区三区| 一本一本久久a久久精品综合妖精| 欧美日韩免费观看一区二区三区| 午夜久久一区| 久久一区二区三区av| 亚洲一区二区日本| 欧美视频免费| 久久综合伊人77777蜜臀| 亚洲国产精品成人va在线观看| 一本久道综合久久精品| 国产日韩欧美一区二区三区在线观看| 久久日韩粉嫩一区二区三区| 亚洲另类视频| 久久久噜噜噜久久中文字免| 99精品视频一区| 国产欧美一区二区三区视频| 欧美日本一道本| 久久国产88| 亚洲欧美日韩第一区| 亚洲日本成人在线观看| 久久久久久夜| 香蕉久久a毛片| 在线看片一区| 国际精品欧美精品| 欧美日韩激情小视频|