peakzhang 发表于 2008-7-13 22:52:16

Proactor框架发送信息时出错error=9

使用proactor框架编程,其中有一段代码如下:
void Sender::handle_write_stream (const ACE_Asynch_Write_Stream::Result &result)
{
ACE_DEBUG ((LM_DEBUG,"Sender::handle_write_stream called\n"));
// Reset pointers.
result.message_block ().rd_ptr (result.message_block ().rd_ptr () - result.bytes_transferred ());
ACE_DEBUG ((LM_DEBUG, "(%t)********************\n"));
ACE_DEBUG ((LM_DEBUG, "%s = %d\n", "bytes_to_write",result.bytes_to_write ()));
ACE_DEBUG ((LM_DEBUG, "%s = %d\n", "handle", result.handle ()));
ACE_DEBUG ((LM_DEBUG, "%s = %d\n", "bytes_transfered",result.bytes_transferred ()));
ACE_DEBUG ((LM_DEBUG, "%s = %d\n", "act", (u_long) result.act ()));
ACE_DEBUG ((LM_DEBUG, "%s = %d\n", "success", result.success ()));
ACE_DEBUG ((LM_DEBUG, "%s = %d\n", "completion_key", (u_long)result.completion_key ()));
ACE_DEBUG ((LM_DEBUG, "%s = %d\n", "error", result.error ()));
ACE_DEBUG ((LM_DEBUG, "(%t)********************\n"));
}
执行时再连接A服务器,断开再连接B服务器,发送消息时会出现error=9的错误
请问:会是什么原因?
另:error=9这个错误可以在哪里找到解释?
在文档中我只找到了error()的解释:Return error value. 不知去哪里找9是什么错误。
谢谢

peakzhang 发表于 2008-7-13 22:52:33

你可以查下/usr/include/sys/errno.h
印象中errno比较小的几个在各个unix系统定义都是一样的
#define EBADF 9 /* Bad file number   */
可能是使用了回收的套接字进行消息发送

peakzhang 发表于 2008-7-13 22:52:44

问题已经解决了,问题很简单,但是找了很久,原因是未在建立第二个连接前调用ACE_OS::closesocket();
页: [1]
查看完整版本: Proactor框架发送信息时出错error=9