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

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.¢% 閱讀(1960) 評論(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>
            午夜精品视频一区| 欧美成人网在线| 亚洲综合日韩在线| 午夜激情综合网| 久久av在线看| 欧美日本网站| 国产欧美精品xxxx另类| 国产综合色产| 亚洲天堂激情| 久久在精品线影院精品国产| 亚洲福利电影| 亚洲一区视频在线观看视频| 欧美一区二区视频97| 欧美gay视频| 国产一区二区三区四区| 亚洲黄色成人久久久| 亚洲欧美日本另类| 欧美大片在线观看一区| 亚洲永久免费视频| 亚欧美中日韩视频| 欧美片网站免费| 黄色亚洲免费| 久久国产精品高清| 免费国产一区二区| 老司机成人网| 欧美激情一区二区三级高清视频| 99在线观看免费视频精品观看| 欧美一区二区三区成人| 欧美香蕉大胸在线视频观看| 亚洲国产精品t66y| 久久综合色综合88| 午夜在线一区| 国产日韩欧美亚洲| 午夜精品剧场| 亚洲自拍偷拍网址| 国产精品高清免费在线观看| 亚洲视频一区二区在线观看 | 国产伦精品一区二区三区免费迷| 亚洲黄页一区| 欧美日韩一区三区| 国产精品国产三级国产| 亚洲免费人成在线视频观看| 国产精品国产三级国产专播精品人 | 欧美日韩视频不卡| 亚洲女性裸体视频| 亚洲在线观看视频网站| 国产美女一区二区| 开心色5月久久精品| 免费欧美视频| 欧美国产91| 性做久久久久久久久| 亚洲一区中文| 亚洲国产第一页| 亚洲午夜久久久| 红桃av永久久久| 日韩视频在线观看一区二区| 国产免费亚洲高清| 亚洲国产成人精品久久久国产成人一区| 免费欧美网站| 久久免费视频在线观看| 欧美久久久久免费| 久久综合99re88久久爱| 欧美日韩中文精品| 欧美一区二区女人| 亚洲欧美另类中文字幕| 亚洲国产专区| 久久久www| 午夜精品福利一区二区蜜股av| 久久久久久久久久久一区 | 免费精品99久久国产综合精品| 亚洲一区尤物| 欧美日韩日本视频| 欧美激情视频在线免费观看 欧美视频免费一| 欧美绝品在线观看成人午夜影视 | 性久久久久久| 国产精品成人一区二区| 99re国产精品| 中国女人久久久| 欧美大片免费久久精品三p | 亚洲欧美怡红院| 欧美在线观看天堂一区二区三区| 欧美日韩天堂| 亚洲一区二区三区高清| 亚洲欧美日韩精品久久亚洲区| 欧美日韩午夜视频在线观看| 亚洲啪啪91| 亚洲欧美日韩精品久久久久| 国产精品久久久久久久久婷婷| 亚洲午夜激情| 久久综合九色综合网站 | 国产一区二区三区高清 | 国产一区二区三区久久 | 久久久夜夜夜| 亚洲成人在线视频网站| 欧美丰满少妇xxxbbb| 亚洲免费不卡| 久久久久久欧美| 91久久久国产精品| 国产精品国产三级国产普通话蜜臀 | 欧美国产专区| 亚洲精品中文字幕女同| 国产精品久久久久久影视| 性欧美video另类hd性玩具| 亚洲高清二区| 久久激情视频免费观看| 亚洲人成在线观看一区二区| 国产精品国产三级国产普通话三级 | 欧美日韩精品一区二区三区| 亚洲综合丁香| 91久久极品少妇xxxxⅹ软件| 欧美伊人久久| 日韩一级精品视频在线观看| 国内伊人久久久久久网站视频| 欧美麻豆久久久久久中文| 久久精品在线观看| 亚洲在线观看| 亚洲午夜一区二区| 亚洲毛片一区| 亚洲国产精品成人一区二区| 久久只有精品| 久久人人爽国产| 篠田优中文在线播放第一区| 亚洲色诱最新| 日韩一区二区精品葵司在线| 亚洲精品免费看| 亚洲精品久久久久久久久| 亚洲第一在线视频| 在线日韩中文字幕| 亚洲国产va精品久久久不卡综合| 国产欧美日韩视频| 国产主播一区二区三区四区| 国内视频一区| 亚洲激情影视| 一本色道**综合亚洲精品蜜桃冫| 亚洲毛片在线观看.| 夜色激情一区二区| 性色av一区二区怡红| 久久精品国产99精品国产亚洲性色 | 国产一区二区欧美| 亚洲成人在线视频播放| 亚洲精品久久久蜜桃| 一区二区三区欧美成人| 激情六月婷婷久久| 国产在线拍揄自揄视频不卡99| 国产一区二区三区的电影| 在线观看欧美亚洲| 在线中文字幕不卡| 久久免费高清| 亚洲精品国产日韩| 久久xxxx精品视频| 欧美日韩免费| 亚洲第一福利视频| 午夜精品视频在线| 亚洲电影第三页| 亚洲欧美在线高清| 欧美日韩国产91| 伊人春色精品| 久久国产精品一区二区三区四区| 欧美黄在线观看| 久久精品国产77777蜜臀| 欧美色精品天天在线观看视频| 亚洲福利专区| 久久免费国产| 欧美一级播放| 国产欧美日韩一区二区三区| 一本一本久久a久久精品综合麻豆| 久久国产精品毛片| 亚洲国产欧美一区二区三区同亚洲| 亚洲一区二区三区中文字幕在线 | 美女精品国产| 樱桃成人精品视频在线播放| 久久都是精品| 欧美一区二区三区在线| 国产亚洲综合在线| 欧美精品91| 欧美剧在线免费观看网站| 亚洲激情第一区| 亚洲国语精品自产拍在线观看| 久久精品中文字幕一区| 亚洲电影免费观看高清| 欧美aaaaaaaa牛牛影院| 美日韩精品视频免费看| 亚洲精品久久久久久久久久久 | 久久精品99国产精品| 欧美一区二区三区免费大片| 黄色日韩精品| 亚洲免费观看高清完整版在线观看熊 | 你懂的国产精品永久在线| 久久天天躁狠狠躁夜夜av| 欧美激情网友自拍| 亚洲综合色在线| 久久久xxx| 亚洲视频精品在线| 欧美一区二区视频在线观看| 亚洲激情一区二区三区| 亚洲视频网站在线观看| 在线观看一区欧美| 中文网丁香综合网| 亚洲高清资源综合久久精品| 一区二区三区免费看|