socket服务端的错误代码995,请指教

xishuang 2006-09-12 02:41:46
socket通信中出现“由于线程退出或应用程序请求,已放弃 I/O 操作”,是什么问题,怎么解决?
...全文
1232 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2006-09-12
  • 打赏
  • 举报
回复
http://www.maocom.com/resources/program/html/200689/9269.htm
jixingzhong 2006-09-12
  • 打赏
  • 举报
回复
这个错误也有可能是 Win系统 的问题
jixingzhong 2006-09-12
  • 打赏
  • 举报
回复
一个微软的串口操作的例子,下面是串口操作部分,由于使用了一些自定义结构,应该无法直接拷贝使用,仅供参考:

/*-----------------------------------------------------------------------------

FUNCTION: WriterGeneric(char *, DWORD)

PURPOSE: Handles sending all types of data

PARAMETER:
lpBuf - pointer to data buffer
dwToWrite - size of buffer

HISTORY: Date: Author: Comment:
10/27/95 AllenD Wrote it

-----------------------------------------------------------------------------*/
DWORD CSerialCom::WriterGeneric(char * lpBuf, DWORD dwToWrite)
{
OVERLAPPED osWrite = {0};
HANDLE hArray[2];
DWORD dwWritten;
DWORD dwRes;

//
// If no writing is allowed, then just return
//
if (NOWRITING(COMInfo))
return -1;

//
// create this writes overlapped structure hEvent
//
osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (osWrite.hEvent == NULL)
printf_log("CreateEvent (overlapped write hEvent)\n");

hArray[0] = osWrite.hEvent;
hArray[1] = ghThreadWriteOverEvent;//其实没有使用

//
// issue write
//
if (!WriteFile(COMDEV(COMInfo), lpBuf, dwToWrite, &dwWritten, &osWrite)) {
if (GetLastError() == ERROR_IO_PENDING) {
//
// write is delayed
//
dwRes = WaitForMultipleObjects(2, hArray, FALSE, WRITE_CHECK_TIMEOUT);
switch(dwRes)
{
case WAIT_OBJECT_0:
SetLastError(ERROR_SUCCESS);
if (!GetOverlappedResult(COMDEV(COMInfo), &osWrite, &dwWritten, FALSE)) {
if (GetLastError() == ERROR_OPERATION_ABORTED)
printf_log("Write aborted\r\n");
else
printf_log("GetOverlappedResult(in Writer)\n");
//ShowLastError("Write:GetOverlappedResult");
CheckComStat(TRUE);
}

if (dwWritten != dwToWrite) {
if (GetLastError() == ERROR_SUCCESS)
printf_log("Write timed out. (overlapped)\r\n");
else
printf_log("Error writing data to port (overlapped)\n");
}
break;

//
// thread exit event set
//
case WAIT_OBJECT_0 + 1:
break;

//
// wait timed out
//
case WAIT_TIMEOUT:
printf_log("Wait Timeout in WriterGeneric.\r\n");
break;

case WAIT_FAILED:
default: printf_log("WaitForMultipleObjects (WriterGeneric)\n");
break;
}
}
else
//
// writefile failed, but it isn't delayed
//
printf_log("WriteFile (in Writer)\n");
}
else {
//
// writefile returned immediately
//
if (dwWritten != dwToWrite)
printf_log("Write timed out. (immediate)\r\n");
}

CloseHandle(osWrite.hEvent);

return dwWritten;
}
tomPeakz 2006-09-12
  • 打赏
  • 举报
回复
同意 DJay。
你投递了一次异步操作,但是还没等到这个操作完成,这个线程就退出了。

──────────────────────
国内专业的ACE论坛开通:
www.acejoy.com
www.acedevelop.com
涉及ACE使用和开发,服务器端软件的设计,P2P技术,
网络编程等内容。
欢迎加入,大家一起交流、学习成长!
jixingzhong 2006-09-12
  • 打赏
  • 举报
回复
可能你的 socket连接 已经关闭了 ...
DJay 2006-09-12
  • 打赏
  • 举报
回复
995这个错误是指由于套接字的关闭,造成一次重叠IO操作的取消,除此以外,该错误也可能在执行SIO_FLUSH这个IO控制操作命令时出现。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧