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

Creative Commons License
本Blog采用 知識共享署名-非商業(yè)性使用-禁止演繹 3.0 Unported許可協(xié)議 進(jìn)行許可。 —— 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 閱讀(8957) 評論(9)  編輯 收藏 引用 所屬分類: T技術(shù)碎語

本文同步自游戲人生

在使用IOCP時,最重要的幾個API就是GetQueueCompeltionStatus、WSARecv、WSASend,數(shù)據(jù)的I/O及其完成狀態(tài)通過這幾個接口獲取并進(jìn)行后續(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)閉。

嚴(yá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。

嚴(yán)重程度輕微易處理

WSAECONNRESET (10054): Connection reset by peer.

遠(yuǎn)程主機強迫關(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ù)投遞或等待了。

嚴(yán)重程度輕微易處理

WSAECONNREFUSED (10061): Connection refused.

由于目標(biāo)機器積極拒絕,無法連接。

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è)去了?

嚴(yán)重程度輕微易處理

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投遞不當(dāng)引起的。

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

嚴(yán)重程度嚴(yán)重

本文主要參考MSDN

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

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

Feedback

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

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 - 遠(yuǎn)程主機強迫關(guān)閉了一個現(xiàn)有的連接
// 10058 - 由于以前的關(guān)閉調(diào)用,套接字在那個方向已經(jīng)關(guān)閉,發(fā)送或接收數(shù)據(jù)的請求沒有被接受。

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

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

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

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

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

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

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使用時常見的幾個錯誤  回復(fù)  更多評論   

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| 亚洲综合不卡| 午夜在线一区| 亚洲一区二区三区四区在线观看| 91久久国产自产拍夜夜嗨| 国产在线麻豆精品观看| 在线观看成人小视频| 亚洲国产你懂的| av成人免费在线| 欧美尤物巨大精品爽| 另类专区欧美制服同性| 亚洲国产天堂久久综合网| 91久久久在线| 亚洲精品在线二区| 日韩亚洲欧美成人| 亚洲社区在线观看| 欧美一级片一区| 免费观看在线综合色| 欧美理论电影在线观看| 国产精品久久福利| 一区免费视频| 亚洲男人av电影| 免费在线亚洲| 亚洲私人黄色宅男| 蜜臀av一级做a爰片久久| 欧美午夜不卡在线观看免费 | 国产乱码精品一区二区三区不卡 | 极品尤物一区二区三区| 日韩午夜视频在线观看| 欧美在线一二三四区| 亚洲激情六月丁香| 欧美一站二站| 国产精品a级| 亚洲激情偷拍| 久久久综合视频| 在线中文字幕一区| 免费欧美在线| 伊人色综合久久天天五月婷| 午夜激情综合网| 亚洲精品中文字幕女同| 久久久久久穴| 国产一本一道久久香蕉| 亚洲在线视频观看| 亚洲精品免费在线| 久久久久久久久久久久久久一区| 国产精品免费看片| 亚洲伊人久久综合| 99国产精品久久久久久久| 欧美激情片在线观看| 最新国产精品拍自在线播放| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美一级二区| 国产主播精品在线| 久久久五月天| 久久久国产亚洲精品| 国模吧视频一区| 久久久久久自在自线| 欧美伊人影院| 好男人免费精品视频| 久久久亚洲影院你懂的| 欧美中日韩免费视频| 国内成+人亚洲+欧美+综合在线| 一区二区欧美国产| 美日韩精品免费| 亚洲成在线观看| 蜜乳av另类精品一区二区| 午夜精品影院| 国产亚洲午夜高清国产拍精品| 午夜亚洲视频| 亚洲一区二区三区在线视频| 国产精品久久久久7777婷婷| 欧美一级片在线播放| 亚洲欧美在线观看| 狠狠色狠色综合曰曰| 久久野战av| 欧美成va人片在线观看| 夜夜嗨av色一区二区不卡| 日韩视频一区| 国产精品久久毛片a| 久久精品国产亚洲高清剧情介绍| 久久er精品视频| 亚洲精品看片| 亚洲影音先锋| 激情av一区| 最新日韩在线| 国产精品久久久久婷婷| 久久久久国产精品人| 欧美激情欧美狂野欧美精品| 亚洲欧美在线另类| 久久久久9999亚洲精品| 亚洲人成网站在线播| 一区二区三区免费观看| 影音先锋久久资源网| 一卡二卡3卡四卡高清精品视频| 国产亚洲欧美一级| 亚洲精品久久久久久久久| 国产乱人伦精品一区二区 | 久久亚洲综合色| 在线亚洲国产精品网站| 欧美中文字幕视频在线观看| 一本色道久久88综合日韩精品| 午夜精品av| 一本色道久久综合亚洲精品小说| 欧美影院成人| 亚洲永久免费观看| 母乳一区在线观看| 久久久久久日产精品| 欧美亚一区二区| 亚洲国产精品激情在线观看| 韩国三级在线一区| 一区二区三区欧美在线| 亚洲激情一区二区| 性做久久久久久免费观看欧美| av成人免费在线观看| 麻豆精品视频在线观看| 久久一二三国产| 国产日本欧美在线观看| 一区二区三区国产在线观看| 亚洲国产成人av好男人在线观看| 亚洲一区二区黄| 夜夜嗨av一区二区三区免费区| 久久久久国产精品www| 久久国产婷婷国产香蕉| 国产精品女人久久久久久| 欧美一区二区三区四区夜夜大片| 一本久久综合亚洲鲁鲁五月天| 久久久青草婷婷精品综合日韩| 香蕉久久精品日日躁夜夜躁| 欧美精品免费观看二区| 免费人成精品欧美精品| 激情丁香综合| 久久精品人人| 久久影音先锋| 国内精品伊人久久久久av影院 | 久久综合九色99| 久久久久se| 一区在线视频| 久久久夜色精品亚洲| 麻豆精品一区二区综合av| 国产一区高清视频| 久久精品国产69国产精品亚洲| 久久久噜噜噜久久久| 在线视频国内自拍亚洲视频| 久久婷婷成人综合色| 欧美高清一区二区| 亚洲美女淫视频| 欧美三级在线视频| 亚洲一区精品视频| 久久久精品国产免大香伊 | 亚洲作爱视频| 亚洲欧美日韩国产中文在线| 国产女主播视频一区二区| 午夜精品久久久久| 久久婷婷人人澡人人喊人人爽| 一区二区三区在线视频播放| 久久久夜精品| 亚洲三级视频| 欧美一区二区三区精品| 国内精品伊人久久久久av一坑| 久久婷婷国产综合精品青草| 亚洲级视频在线观看免费1级| 亚洲一区二区免费看| 国产一区二区精品久久| 欧美mv日韩mv国产网站app| 99精品99久久久久久宅男| 午夜国产欧美理论在线播放| 国语自产在线不卡| 欧美精品在线一区二区| 午夜精品影院| 亚洲人午夜精品| 久久久成人精品| 9l国产精品久久久久麻豆| 国产午夜精品久久久| 欧美多人爱爱视频网站| 欧美亚洲日本一区| 亚洲毛片在线看| 美女诱惑一区| 亚洲欧美国产高清| 91久久精品国产91久久| 国产欧美日韩亚洲| 欧美日韩免费观看一区二区三区| 久久av免费一区| 一区二区欧美视频| 亚洲国产高清aⅴ视频| 久久国产精品毛片| 在线综合视频| 亚洲精品一区二区三| 国产资源精品在线观看| 欧美日韩亚洲国产一区| 国产精品不卡在线| 欧美成年网站| 亚洲自啪免费| 亚洲美女一区| 国模精品娜娜一二三区| 欧美午夜精品久久久久免费视 | 亚洲精品在线三区| 久久久欧美一区二区| 午夜激情亚洲| 亚洲欧美福利一区二区| 一区二区高清视频在线观看|