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

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 閱讀(8917) 評論(9)  編輯 收藏 引用 所屬分類: T技術(shù)碎語

本文同步自游戲人生

在使用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.

除了關(guān)心這個API的in & out(這是MSDN開頭的幾行就可以告訴我們的)之外,我們更加關(guān)心不同的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.

假設(shè)我們指定dwMilliseconds為INFINITE。

這里常見的幾個錯誤有:

WSA_OPERATION_ABORTED (995): Overlapped operation aborted.

由于線程退出或應(yīng)用程序請求,已放棄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關(guān)閉后,針對這些socket的pending overlapped I/O operation被中止。

解決方案:針對socket,一般應(yīng)該先調(diào)用shutdown禁止I/O操作后再調(diào)用closesocket關(guān)閉。

嚴重程度輕微易處理

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關(guān)閉socket之后,針對該invalid socket的任何操作都會獲得該錯誤。

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

嚴重程度輕微易處理

WSAECONNRESET (10054): Connection reset by peer.

遠程主機強迫關(guān)閉了一個現(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突然中止(原因如上所述),往其對應(yīng)的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時,服務(wù)器沒有運行或者服務(wù)器的監(jiān)聽隊列已滿;在使用WSAAccept時,客戶端的連接請求被condition function拒絕。

解決方案:Call connect or WSAConnect again for the same socket. 等待服務(wù)器開啟、監(jiān)聽空閑或查看被拒絕的原因。是不是長的丑或者錢沒給夠,要不就是服務(wù)器拒絕接受天價薪酬自主創(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.

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

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

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

嚴重程度嚴重

本文主要參考MSDN

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

Fox只是對自己關(guān)心的幾個錯誤和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)資源不足,無法完成請求的服務(wù)。
// 995 - 由于線程退出或應(yīng)用程序請求,已放棄 I/O 操作。

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

// 0 - 操作成功完成。
// 997 - 重疊 I/O 操作在進行中。
// 998 - 內(nèi)存分配訪問無效。 (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>
            欧美 日韩 国产在线| 国产一区二区精品在线观看| 亚洲国产综合在线看不卡| 免费一区二区三区| 蜜臀a∨国产成人精品| 影院欧美亚洲| 最新国产乱人伦偷精品免费网站| 久久综合九色综合久99| 1769国内精品视频在线播放| 亚洲欧洲日韩女同| 国产精品久久久久久久午夜 | 欧美日韩在线三区| 欧美一级久久久久久久大片| 欧美亚洲一区在线| 亚洲日本无吗高清不卡| 99精品视频免费观看| 国产欧美日韩91| 亚洲电影免费在线观看| 国产精品美女999| 久久综合电影| 国产精品国产三级国产aⅴ浪潮| 久久av红桃一区二区小说| 老牛影视一区二区三区| 亚洲一区二区三区在线看| 久久成年人视频| 夜夜夜精品看看| 亚洲欧美日韩在线综合| 欧美黄色免费网站| 日韩视频―中文字幕| 羞羞漫画18久久大片| 亚洲麻豆一区| 欧美在线综合| 在线中文字幕一区| 狂野欧美激情性xxxx欧美| 亚洲女人小视频在线观看| 久热爱精品视频线路一| 性伦欧美刺激片在线观看| 欧美日韩国产123| 毛片精品免费在线观看| 国产精品亚洲一区| 日韩小视频在线观看| 亚洲国产成人精品久久久国产成人一区 | 国产精品久久夜| 亚洲国内高清视频| 激情综合久久| 亚洲欧美一级二级三级| 亚洲午夜成aⅴ人片| 蜜桃av一区二区| 美女脱光内衣内裤视频久久影院| 国产精品免费视频观看| 日韩写真视频在线观看| 日韩午夜在线视频| 欧美国产大片| 亚洲国产激情| 亚洲欧美视频在线观看| 国产精品亚洲美女av网站| 亚洲精品国产精品乱码不99按摩 | 欧美色综合天天久久综合精品| 欧美激情一区二区三区在线视频观看| 韩国v欧美v日本v亚洲v| 欧美在线综合| 免费国产一区二区| 黄色成人av在线| 久久久久九九视频| 久久综合婷婷| 亚洲丰满少妇videoshd| 久久综合五月天婷婷伊人| 老司机亚洲精品| 亚洲国产99精品国自产| 欧美国产日韩一区二区| 最新中文字幕亚洲| 一区二区三区**美女毛片| 欧美日韩国产综合新一区| 亚洲九九九在线观看| 亚洲男女自偷自拍图片另类| 国产精品呻吟| 久久久国产精品亚洲一区| 欧美华人在线视频| 日韩香蕉视频| 国产精品免费网站| 午夜一级在线看亚洲| 快射av在线播放一区| 亚洲国产一区在线观看| 欧美日韩精品一区二区在线播放| 在线中文字幕一区| 久久久精品一区| 亚洲人成久久| 国产精品视频精品视频| 久久精品123| 亚洲人成网站色ww在线| 午夜精品国产| 亚洲国产成人久久综合一区| 欧美天堂亚洲电影院在线播放| 午夜精品一区二区三区在线| 欧美激情精品| 欧美一级视频| 亚洲日本一区二区| 国产日本欧美一区二区三区| 久久伊人亚洲| 亚洲在线免费视频| 亚洲电影网站| 久久国产精品第一页| 亚洲精品乱码久久久久| 国产欧美日韩激情| 欧美伦理在线观看| 久久精品导航| 亚洲一区在线免费| 亚洲欧洲精品一区| 狼人天天伊人久久| 午夜在线一区| aa级大片欧美| 亚洲国产欧美一区| 国产日韩精品综合网站| 欧美日韩国产一区精品一区 | 蜜桃av一区二区三区| 亚洲欧美色婷婷| 日韩视频一区二区三区在线播放免费观看 | 国内欧美视频一区二区| 欧美性大战xxxxx久久久| 久久久亚洲人| 午夜精品久久久久久久99热浪潮 | 欧美在线免费看| 99riav久久精品riav| 欧美激情久久久| 另类av导航| 久久久午夜电影| 久久国产精品一区二区三区| 一本色道久久综合亚洲91| 亚洲电影av| 精品动漫一区二区| 国产一区二区久久| 国产丝袜一区二区| 国产精品最新自拍| 国产精品一区二区三区免费观看 | 久久亚洲影院| 久久躁狠狠躁夜夜爽| 久久久国产午夜精品| 欧美有码在线视频| 午夜在线成人av| 性亚洲最疯狂xxxx高清| 性刺激综合网| 欧美在线视频二区| 久久国产加勒比精品无码| 久久gogo国模啪啪人体图| 欧美中文在线字幕| 久久久久久久999精品视频| 久久久.com| 久久综合国产精品| 欧美国产精品劲爆| 欧美国产亚洲精品久久久8v| 欧美激情一区二区久久久| 欧美日韩国产精品| 国产精品户外野外| 国产婷婷色综合av蜜臀av | 欧美精品三级日韩久久| 欧美日韩国产首页在线观看| 欧美偷拍另类| 国产免费成人av| 影音先锋中文字幕一区二区| 91久久精品日日躁夜夜躁欧美| 99精品欧美一区| 午夜精品久久久久久99热软件 | 中国亚洲黄色| 久久国产精品久久w女人spa| 久色婷婷小香蕉久久| 亚洲国产日韩欧美一区二区三区| 亚洲精品免费在线观看| 亚洲一区二区三区精品视频| 欧美一区永久视频免费观看| 牛牛影视久久网| 国产精品美女在线| 黄色成人av网| 亚洲在线网站| 免费观看成人| 亚洲视频精品| 久久久久9999亚洲精品| 欧美激情综合亚洲一二区| 国产精品三级久久久久久电影| 在线欧美一区| 亚洲欧美日韩国产成人精品影院| 久久午夜国产精品| 日韩午夜在线观看视频| 久久精品综合一区| 欧美日韩一区二区三区在线观看免 | 翔田千里一区二区| 欧美激情国产日韩| 国产一区二区丝袜高跟鞋图片| 一片黄亚洲嫩模| 鲁大师影院一区二区三区| 在线视频你懂得一区| 裸体一区二区| 国产亚洲成精品久久| 亚洲素人在线| 亚洲国产成人精品女人久久久| 午夜久久资源| 国产精品久久久久久久久免费樱桃| 久久九九有精品国产23| 欧美日韩mv| 国产有码一区二区| 国产一区二区三区在线免费观看|