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

Creative Commons License
本Blog采用 知識共享署名-非商業(yè)性使用-禁止演繹 3.0 Unported許可協(xié)議 進行許可。 —— Fox <游戲人生>

游戲人生

游戲人生 != ( 人生 == 游戲 )
站點遷移至:http://www.yulefox.com。請訂閱本博的朋友將RSS修改為http://feeds.feedburner.com/yulefox
posts - 62, comments - 508, trackbacks - 0, articles - 7

IOCP使用時常見的幾個錯誤

Posted on 2009-09-12 00:20 Fox 閱讀(8994) 評論(9)  編輯 收藏 引用 所屬分類: T技術碎語

本文同步自游戲人生

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

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.

遠程主機強迫關閉了一個現(xiàn)有的連接。

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,那就由不得別人了。至少,你要知道這樣的錯誤已經(jīng)出現(xiàn)了,就不要再費勁的繼續(xù)投遞或等待了。

嚴重程度輕微易處理

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時,服務器沒有運行或者服務器的監(jiān)聽隊列已滿;在使用WSAAccept時,客戶端的連接請求被condition function拒絕。

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

嚴重程度輕微易處理

WSAENOBUFS (10055): No buffer space available.

由于系統(tǒng)緩沖區(qū)空間不足或列隊已滿,不能執(zhí)行套接字上的操作。

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

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

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

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

嚴重程度嚴重

本文主要參考MSDN

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

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

Feedback

# re: IOCP使用時常見的幾個錯誤[未登錄]  回復  更多評論   

2009-09-15 18:11 by foxriver
GetQueueCompeltionStatus 恐怖的一沓糊涂,運行一段時間就蹦出些莫名的錯誤,我這輩子是不會再用了。。。socket萬歲。

BOOL bSuccess = GetQueuedCompletionStatus(m_hCompletionPort, &dwNumberBytes,
&CompletionKey, (LPOVERLAPPED*)&overlap, 10);//10ms for cpu eat.

time_check();

if (overlap) personal = overlap->content;

if (bSuccess == FALSE)
{
DWORD LastError = GetLastError();
if (LastError == WAIT_TIMEOUT)
continue;

// 2 - 系統(tǒng)找不到指定的文件。
// 121 - 信號燈超時時間已到。

// 1450 - 系統(tǒng)資源不足,無法完成請求的服務。
// 995 - 由于線程退出或應用程序請求,已放棄 I/O 操作。

// 64 - 指定的網(wǎng)絡名不再可用。
// 10053 - 您的主機中的軟件放棄了一個已建立的連接。
// 10054 - 遠程主機強迫關閉了一個現(xiàn)有的連接
// 10058 - 由于以前的關閉調用,套接字在那個方向已經(jīng)關閉,發(fā)送或接收數(shù)據(jù)的請求沒有被接受。

// 0 - 操作成功完成。
// 997 - 重疊 I/O 操作在進行中。
// 998 - 內存分配訪問無效。 (when fread() filesize > 3G)

# re: IOCP使用時常見的幾個錯誤  回復  更多評論   

2011-04-15 11:47 by Nike Chaussure
給力。 我得多學點

# re: IOCP使用時常見的幾個錯誤  回復  更多評論   

2011-04-19 10:36 by Nike Chaussure
給力。 我得多學點

# re: IOCP使用時常見的幾個錯誤  回復  更多評論   

2011-07-02 19:16 by VeraDAY
Every one acknowledges that modern life seems to be not very cheap, however we need cash for different things and not every one gets enough cash. Thus to get some <a href="http://bestfinance-blog.com/topics/mortgage-loans">mortgage loans</a> and sba loan should be a right way out.

# re: IOCP使用時常見的幾個錯誤  回復  更多評論   

2011-09-05 15:19 by rolex replicas
太感謝了~!
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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人在线视午夜片| 久久国产天堂福利天堂| 美日韩免费视频| 亚洲一区3d动漫同人无遮挡| 久久gogo国模裸体人体| 亚洲精品欧洲| 新67194成人永久网站| 亚洲国产精品电影在线观看| 一本高清dvd不卡在线观看| 国产一区美女| 亚洲人成网站影音先锋播放| 国产精品私房写真福利视频| 免费在线亚洲欧美| 国产精品日韩欧美一区二区| 亚洲高清中文字幕| 国产亚洲一区二区精品| 亚洲三级影院| 尤物网精品视频| 亚洲在线免费| 日韩一级免费观看| 久久综合电影一区| 久久成人免费电影| 欧美日韩在线不卡一区| 欧美第一黄色网| 国产亚洲一区二区三区在线播放| 亚洲理论在线观看| 亚洲激情成人网| 久久精品综合一区| 久久精品国产第一区二区三区| 欧美日韩999| 欧美国产一区二区| 尹人成人综合网| 久久国产天堂福利天堂| 欧美怡红院视频一区二区三区| 欧美激情中文字幕乱码免费| 猛男gaygay欧美视频| 国产在线不卡精品| 亚洲欧美视频一区| 亚洲欧美日韩综合| 国产精品hd| 夜夜狂射影院欧美极品| 99这里只有久久精品视频| 欧美大片在线观看一区| 欧美电影电视剧在线观看| 曰韩精品一区二区| 久久久久中文| 女女同性女同一区二区三区91| 激情六月综合| 久久中文字幕一区二区三区| 久热精品视频| 亚洲经典一区| 欧美精品免费看| 夜夜嗨一区二区三区| 亚洲尤物视频网| 国产精品免费一区二区三区在线观看| 亚洲手机在线| 久久国产欧美精品| 伊人夜夜躁av伊人久久| 久久综合狠狠综合久久综青草 | 亚洲国产精品尤物yw在线观看| 性色av一区二区三区红粉影视| 久久精品电影| 1769国内精品视频在线播放| 免费观看久久久4p| 最新国产成人av网站网址麻豆 | 国产伦精品一区二区三区在线观看| 宅男噜噜噜66一区二区| 久久av一区二区三区| 伊人久久婷婷色综合98网| 欧美大片一区二区| 一区二区三区四区蜜桃| 久久精品二区| 亚洲精品自在在线观看| 国产精品久久久亚洲一区| 久久av一区二区三区漫画| 亚洲成人中文| 亚洲欧美日韩成人高清在线一区| 国产精品区一区二区三| 久久综合久久综合久久| 99re66热这里只有精品3直播| 欧美在线亚洲在线| 亚洲黄色尤物视频| 国产精品免费看片| 老妇喷水一区二区三区| 在线亚洲激情| 欧美电影在线观看| 午夜在线成人av| 亚洲欧洲日本mm| 国产欧美韩国高清| 欧美国产日产韩国视频| 性视频1819p久久| 91久久精品国产91性色tv| 久久激情久久| 亚洲一品av免费观看| 亚洲高清在线视频| 国产日韩精品一区二区浪潮av| 欧美精品在线观看播放| 久久精品人人做人人综合| 亚洲一区二区免费视频| 亚洲激情视频网| 免费欧美日韩| 久久久亚洲成人| 午夜久久黄色| 亚洲线精品一区二区三区八戒| **性色生活片久久毛片| 国产婷婷一区二区| 国产精品你懂的在线欣赏| 欧美激情国产日韩精品一区18| 久久久www成人免费精品| 亚洲欧美999| 亚洲先锋成人| 亚洲午夜视频| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲欧美视频一区| 99精品久久免费看蜜臀剧情介绍| 伊人激情综合| 精品69视频一区二区三区| 国产精品羞羞答答| 国产精品久久久久久久久搜平片| 欧美精品在线网站| 欧美大片国产精品| 欧美寡妇偷汉性猛交| 免费看亚洲片| 欧美福利视频在线| 欧美韩国日本综合| 欧美国产一区二区在线观看| 免费观看国产成人| 欧美电影资源| 欧美激情久久久久| 欧美日韩午夜在线视频| 欧美日韩一区二区三区四区在线观看 | 欧美福利在线| 欧美精品偷拍| 欧美性一二三区| 国产精品热久久久久夜色精品三区 | 久久久久久久网| 老司机免费视频一区二区| 久久综合精品国产一区二区三区| 久久久久久网站| 欧美激情2020午夜免费观看| 欧美极品在线视频| 欧美午夜无遮挡| 国产日韩欧美另类| 在线观看亚洲一区| 日韩香蕉视频| 亚洲欧美自拍偷拍| 巨乳诱惑日韩免费av| 亚洲激情在线观看视频免费| 日韩一区二区精品| 欧美一区二区视频免费观看 | 亚洲国产综合91精品麻豆| 最新中文字幕一区二区三区| 99热免费精品在线观看| 欧美亚洲三级| 欧美国产日韩二区| 国产精品日韩欧美大师| 在线观看日韩国产| 亚洲午夜精品网| 久久久久女教师免费一区| 欧美激情第三页| 亚洲系列中文字幕| 免费日韩成人| 国产农村妇女精品一二区| 亚洲高清一二三区| 亚洲欧美日韩一区在线观看| 牛人盗摄一区二区三区视频| 99香蕉国产精品偷在线观看| 欧美中文字幕久久| 欧美三区免费完整视频在线观看| 国产视频亚洲精品| 一本不卡影院| 久久综合网络一区二区| 正在播放亚洲| 欧美成人午夜剧场免费观看| 国产日韩一区二区三区在线| 亚洲免费激情| 欧美成人嫩草网站| 亚洲欧美在线x视频| 欧美日韩精品伦理作品在线免费观看 | 日韩一级二级三级| 久久一区二区三区av| 国产精品久久久久久亚洲调教| 亚洲日本中文字幕免费在线不卡| 亚洲在线观看免费视频|