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

Creative Commons License
本Blog采用 知識共享署名-非商業性使用-禁止演繹 3.0 Unported許可協議 進行許可。 —— 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技術碎語

本文同步自游戲人生

在使用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進行分析,不提供額外幫助。

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 - 系統找不到指定的文件。
// 121 - 信號燈超時時間已到。

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

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

// 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>
            欧美成人免费大片| 亚洲电影第三页| 国产欧美综合一区二区三区| 欧美福利专区| 欧美激情精品久久久久久久变态| 久久国产主播| 久久视频国产精品免费视频在线| 久久精品国产69国产精品亚洲| 久久国产精品毛片| 麻豆国产精品777777在线 | 在线看片成人| 亚洲福利视频一区| 亚洲国产美女精品久久久久∴| 亚洲国产第一| 国产精品99久久久久久宅男| 亚洲一二三区视频在线观看| 欧美制服丝袜| 美女精品视频一区| 亚洲第一黄色网| 一区二区久久久久久| 亚洲视频欧美在线| 久久综合国产精品| 国产精品成人国产乱一区| 亚洲婷婷在线| 欧美欧美全黄| 欧美激情片在线观看| 国产精品ⅴa在线观看h| 国产自产高清不卡| 日韩一级在线观看| 久久se精品一区精品二区| 欧美高清成人| 正在播放亚洲一区| 美女黄色成人网| 国产精品一区二区男女羞羞无遮挡| 国产日韩欧美在线视频观看| 亚洲激情在线观看| 久久精品99无色码中文字幕 | 99精品视频一区| 久久av一区二区| 亚洲人成网站色ww在线| 亚洲欧美中文日韩v在线观看| 久久久久久一区二区三区| 欧美日韩在线一区二区| 在线电影院国产精品| 亚洲欧美在线一区二区| 亚洲国产精品久久久久秋霞不卡 | 久久久久久网址| 国产精品第一区| 亚洲精品国产精品乱码不99按摩| 午夜精品成人在线| 亚洲精品一区二区三区蜜桃久| 欧美中文字幕不卡| 国产精品亚洲综合| 亚洲一品av免费观看| 欧美成人综合一区| 久久精视频免费在线久久完整在线看| 欧美午夜三级| 亚洲午夜精品一区二区| 亚洲日本欧美日韩高观看| 久久中文在线| 影音先锋亚洲电影| 久久夜色精品| 欧美怡红院视频| 国产一区二区av| 久久大逼视频| 亚洲欧美色一区| 国产伦精品一区二区三区视频黑人| 亚洲私人影院| 一本色道久久加勒比88综合 | 激情久久中文字幕| 久久久91精品国产| 欧美一区二区三区久久精品| 国产精品一香蕉国产线看观看 | 国产精品日韩欧美一区| 亚洲女ⅴideoshd黑人| 一区二区三区欧美激情| 91久久国产自产拍夜夜嗨| 久久人人爽人人爽爽久久| 午夜精品一区二区三区在线视| 国产精品一区二区你懂得| 香蕉久久夜色精品国产使用方法| 中国女人久久久| 国产精品视频午夜| 欧美中文字幕精品| 久久精品国产2020观看福利| 亚洲高清在线精品| 亚洲精品久久久久久下一站| 欧美日韩麻豆| 久久成人国产精品| 久久伊人免费视频| 夜夜嗨av色一区二区不卡| 一区二区三区欧美在线| 国产一级揄自揄精品视频| 欧美黄色aa电影| 国产精品jizz在线观看美国| 久久久久国产一区二区| 欧美xart系列在线观看| 亚洲一区二区三区午夜| 久久九九免费视频| 亚洲视频电影在线| 久久久91精品国产| 中文在线资源观看网站视频免费不卡 | 久久嫩草精品久久久久| 欧美黄色视屏| 欧美在线视频一区| 欧美激情一区二区| 久久久久久久国产| 欧美三区在线| 欧美激情一区二区三级高清视频| 国产精品草莓在线免费观看| 美女亚洲精品| 国产模特精品视频久久久久| 亚洲国产精品久久久久| 国产一区日韩欧美| 亚洲精品免费在线| 在线观看91久久久久久| 亚洲欧美日韩国产| 亚洲视频中文| 欧美日韩成人一区二区| 欧美成人精品不卡视频在线观看| 国产精品丝袜91| 亚洲精品中文在线| 亚洲黄色一区| 久久久亚洲人| 久久久噜噜噜久久人人看| 国产精品国产馆在线真实露脸| 欧美激情一区二区三区成人| 黄色小说综合网站| 欧美在线观看视频一区二区三区| 亚洲午夜三级在线| 亚洲三级毛片| 欧美激情五月| 在线观看日韩专区| 欧美在线一级va免费观看| 亚洲欧美在线免费| 国产精品久久久久一区二区三区共 | 欧美岛国在线观看| 美女被久久久| 一区二区三区在线看| 亚洲综合欧美日韩| 欧美亚洲日本网站| 国产精品女主播| 亚洲一区图片| 性久久久久久久久久久久| 国产精品乱人伦中文| 亚洲一区区二区| 久久国产精品久久久久久久久久 | 亚洲电影在线看| 久久久久久成人| 欧美freesex8一10精品| 亚洲第一页中文字幕| 久久久噜噜噜| 欧美激情精品久久久久久蜜臀 | 久久蜜臀精品av| 美女视频黄免费的久久| 亚洲高清视频一区| 欧美精品一区二区三区在线播放| 最新国产拍偷乱拍精品| 99视频国产精品免费观看| 欧美日韩免费在线观看| 一区二区三区久久| 欧美在线不卡视频| 亚洲成人资源| 欧美大秀在线观看| 亚洲图色在线| 久久久久久尹人网香蕉| 亚洲电影天堂av| 欧美视频第二页| 欧美一区二区私人影院日本| 免费欧美在线视频| 亚洲色诱最新| 狠狠色伊人亚洲综合网站色| 免费久久久一本精品久久区| 亚洲毛片在线观看| 久久精品99久久香蕉国产色戒| 亚洲国产成人午夜在线一区| 欧美日韩一区二区三区免费看| 亚洲一区精彩视频| 欧美激情aⅴ一区二区三区| 亚洲无毛电影| 极品尤物av久久免费看| 欧美日韩p片| 久久国产精彩视频| 日韩视频在线观看国产| 久久亚洲色图| 一区二区免费在线播放| 国户精品久久久久久久久久久不卡| 在线成人av网站| 夜夜嗨av一区二区三区四区| 先锋影音一区二区三区| 在线观看欧美日韩| 国产精品国产精品| 欧美sm重口味系列视频在线观看| 国产精品99久久久久久宅男| 久久久不卡网国产精品一区| 99这里有精品| 亚洲成色999久久网站| 国产欧美 在线欧美| 欧美日韩国产一区| 免费视频一区二区三区在线观看|