|
|
Comments and Discussions
|
|
 |
|

|
Strange. For some reason, v1.31 was ok with just defining RCF_USE_BOOST_ASIO. BOOST_WINDOWS was automatically defined under Cygwin. With 2646, it's still complaining that I need to define USE_WIN32_SOCKETS.
|
|
|
|

|
RCF 2.0.2648 is still broken on Cygwin. I've spent half a day investigating and here's what I found.
It appears that Cygwin uses a modified version of Boost (I'm using 1.48). Boost may have configured it wrong. Cygwin corrects it and then releases it as a package.
For example, in socket_types.hpp (v1.48) line 20, the official version of Boost had this:
#if defined(BOOST_WINDOWS) || defined(__CYGWIN__)
Cygwin's v1.48 line 20:
#if defined(BOOST_WINDOWS)
In light of this, I think to make RCF Cygwin compatible, you'd probably want to grab Boost from Cygwin rather than the official release.
At this stage, even with RCF_USE_BOOST_ASIO defined, there's still a lot of instances where you've included files from your own Boost.Asio (see *.ipp). If that's all sorted out, then there's Boost.Thread still to go.
Bringing Boost into RCF was a bad idea from the very beginning. Now that you've dropped support for external Boost, support for Cygwin is broken as well.
|
|
|
|
|

|
You missed a spot - posix_event.ipp.
It should read,
posix_event::posix_event()
{
int error = ::pthread_cond_init(&cond_, 0);
RCF_VERIFY(error == 0, Exception(_RcfError_ThreadingError("pthread_cond_init()"), error));
}
Otherwise it compiled fine on Cygwin with RCF_USE_BOOST_ASIO.
Just a suggestion, perhaps it would be good to detect Cygwin and #error out if RCF_USE_BOOST_ASIO is not defined?
|
|
|
|
|
|

|
Why is this line disabled for Cygwin?
#ifndef __CYGWIN__
typedef ::socklen_t socklen_t;
#endif
When compiling under Eclipse using Cygwin, compiler bails out due to ::Platform::OS::socklen_t being undefined. Commenting out the ifndef allows the compilation to succeed.
If this is specifically disabled for Cygwin, there must be a reason for it?
|
|
|
|

|
Probably this line caused a compiler error in a cygwin regression testing environment at some point in time, and was therefore ifdef'd out. Feel free to comment out the ifndef - it won't have any negative effects.
Regards,
Jarl
|
|
|
|

|
Any reason you're still keeping this ifdef in RCF v2.0?
I still have to manually remove the ifdef to get it to compile on Cygwin (running the latest version).
|
|
|
|

|
There's no reason - I've removed it now... I'll get you an update shortly.
|
|
|
|

|
Hi Jarl:
You can't imagine how exciting I am when I get here. Your work can help me to solve a puzzle where I struggled for several weeks. Thanks a lot.
There is still one question that I hope you can help me out.
How can I use RCF to send files from server to client?
Cause I've got this really big file like 500MB that i need to transfer from server to client. The file contains data serialized by protocol buffer.
If I can't send files, what's the best solution you recommanded?
I hope that you can help me. Thank you so much!
|
|
|
|

|
Hi,
RCF 2.0 has built in support for file transfers, and will be released soon. RCF 2.0 will be available for download from the RCF website (http://www.deltavsoft.com), once it is released.
You can also transfer files using RCF 1.3, but you will need to implement it yourself by splitting the file into chunks and sending the chunks separately, and then reassembling the chunks on the other side.
Regards,
Jarl
|
|
|
|

|
Great work, but I have one question: I have rather large vector of objects, and I receive this error: Client-side message length error. Incoming message length: 2526715. Max allowed message length: 1048576.
How do I set max length of the message?
Thanks
|
|
|
|
|
|

|
Hi, Jarl!
Could you please point how to implement constant interface method?
RCF_BEGIN(I_A, "I_A")
RCF_METHOD_V0(void, func1)
RCF_END(I_Base)
class I_A {
void func1() const
{
}
};
For example above, how to make constant func1() the method?
Thanx!
|
|
|
|

|
Hi, This is currently not supported - remotely callable functions have to be non-const. I will look at supporting const functions in future versions. Regards, Jarl
|
|
|
|
|

|
template<typename Archive>
void serialize(Archive &ar, Derived2 &derived2, const unsigned int)
{
// Valid for both SF and B.S.
serializeParent<Base>(derived1);
// ...
}
in the example of sending polymorphic objects you meen "serializeParent<Base>(derived2)", correct?
|
|
|
|
|

|
Whaoo ! And I like the leveraging on boost.
|
|
|
|

|
Not much more to say - just brilliant! Thank you for such a great library.
|
|
|
|

|
Hi, Jarl, bother you again.
I used RCF 1.2,boost 1.43 and stlport 5.2.1 together in my project,and it worked very well.Recently, I want to use RCF 1.3 instead of RCF 1.2,so I replaced the all RCF files with version 1.3, and replaced the boost lib and header files with version 1.45.
I can successfully build my project,but fail to run it.
Do I miss some thing?Any hints?
when exception occurs, the callback stack is below:
stlportstld.5.2.dll!stlpd_std::basic_streambuf<char,stlpd_std::char_traits<char> >::pubimbue(const stlpd_std::locale & __loc={...}) Line 46 + 0xc bytes C++
stlportstld.5.2.dll!stlpd_std::basic_ios<char,stlpd_std::char_traits<char> >::imbue(const stlpd_std::locale & __loc={...}) Line 73 + 0x13 bytes C++
stlportstld.5.2.dll!stlpd_std::basic_ios<char,stlpd_std::char_traits<char> >::init(stlpd_std::basic_streambuf<char,stlpd_std::char_traits<char> > * __sb=0x03377758) Line 100 + 0x28 bytes C++
stlportstld.5.2.dll!stlpd_std::basic_istream<char,stlpd_std::char_traits<char> >::basic_istream<char,stlpd_std::char_traits<char> >(stlpd_std::basic_streambuf<char,stlpd_std::char_traits<char> > * __buf=0x03377758) Line 89 C++
RCFServerAdapter.dll!RCF::mem_istream::mem_istream(const char * buffer=0x00000000, unsigned int bufferLen=0) Line 86 + 0x9a bytes C++
RCFServerAdapter.dll!RCF::SerializationProtocolIn::SerializationProtocolIn() Line 63 + 0x70 bytes C++
RCFServerAdapter.dll!RCF::RcfSession::RcfSession(RCF::RcfServer & server={...}) Line 49 + 0x148 bytes C++
RCFServerAdapter.dll!RCF::RcfServer::createSession() Line 550 + 0x32 bytes C++
RCFServerAdapter.dll!RCF::TcpIocpSessionState::create(RCF::TcpIocpServerTransport & transport={...}) Line 44 + 0x13 bytes C++
RCFServerAdapter.dll!RCF::TcpIocpServerTransport::onServerStart(RCF::RcfServer & server={...}) Line 669 + 0x13 bytes C++
RCFServerAdapter.dll!boost::_mfi::mf1<void,RCF::I_Service,RCF::RcfServer &>::call<boost::shared_ptr<RCF::I_Service>,RCF::RcfServer>(boost::shared_ptr<RCF::I_Service> & u={...}, const void * __formal=0x00000000, RCF::RcfServer & b1={...}) Line 156 + 0x1b bytes C++
RCFServerAdapter.dll!boost::_mfi::mf1<void,RCF::I_Service,RCF::RcfServer &>::operator()<boost::shared_ptr<RCF::I_Service> >(boost::shared_ptr<RCF::I_Service> & u={...}, RCF::RcfServer & a1={...}) Line 172 C++
RCFServerAdapter.dll!boost::_bi::list2<boost::arg<1>,boost::reference_wrapper<RCF::RcfServer> >::operator()<boost::_mfi::mf1<void,RCF::I_Service,RCF::RcfServer &>,boost::_bi::list1<boost::shared_ptr<RCF::I_Service> &> >(boost::_bi::type<void> __formal={...}, boost::_mfi::mf1<void,RCF::I_Service,RCF::RcfServer &> & f={...}, boost::_bi::list1<boost::shared_ptr<RCF::I_Service> &> & a={...}, boost::_bi::type<void> __formal={...}) Line 314 C++
RCFServerAdapter.dll!boost::_bi::bind_t<void,boost::_mfi::mf1<void,RCF::I_Service,RCF::RcfServer &>,boost::_bi::list2<boost::arg<1>,boost::reference_wrapper<RCF::RcfServer> > >::operator()<boost::shared_ptr<RCF::I_Service> >(boost::shared_ptr<RCF::I_Service> & a1={...}) Line 33 C++
RCFServerAdapter.dll!stlpd_std::for_each<stlpd_std::priv::_DBG_iter<stlpd_std::priv::_NonDbg_vector<boost::shared_ptr<RCF::I_Service>,stlpd_std::allocator<boost::shared_ptr<RCF::I_Service> > >,stlpd_std::priv::_DbgTraits<stlpd_std::priv::_Vector_nonconst_traits<boost::shared_ptr<RCF::I_Service>,boost::shared_ptr<RCF::I_Service> *> > >,boost::_bi::bind_t<void,boost::_mfi::mf1<void,RCF::I_Service,RCF::RcfServer &>,boost::_bi::list2<boost::arg<1>,boost::reference_wrapper<RCF::RcfServer> > > >(stlpd_std::priv::_DBG_iter<stlpd_std::priv::_NonDbg_vector<boost::shared_ptr<RCF::I_Service>,stlpd_std::allocator<boost::shared_ptr<RCF::I_Service> > >,stlpd_std::priv::_DbgTraits<stlpd_std::priv::_Vector_nonconst_traits<boost::shared_ptr<RCF::I_Service>,boost::shared_ptr<RCF::I_Service> *> > > __first=0x028dc510 {px=0x03375774 pn={...} }, stlpd_std::priv::_DBG_iter<stlpd_std::priv::_NonDbg_vector<boost::shared_ptr<RCF::I_Service>,stlpd_std::allocator<boost::shared_ptr<RCF::I_Service> > >,stlpd_std::priv::_DbgTraits<stlpd_std::priv::_Vector_nonconst_traits<boost::shared_ptr<RCF::I_Service>,boost::shared_ptr<RCF::I_Service> *> > > __last=0x028dc538 {px=0x028dc4e8 pn={...} }, boost::_bi::bind_t<void,boost::_mfi::mf1<void,RCF::I_Service,RCF::RcfServer &>,boost::_bi::list2<boost::arg<1>,boost::reference_wrapper<RCF::RcfServer> > > __f={...}) Line 61 + 0x11 bytes C++
RCFServerAdapter.dll!RCF::RcfServer::startImpl(bool spawnThreads=true) Line 350 + 0x8d bytes C++
RCFServerAdapter.dll!RCF::RcfServer::start() Line 283 C++
RCFServerAdapter.dll!RCFServerAdapter::CRCFServerOperation::CreateRCFServer(unsigned int nPort=5002, const stlpd_std::basic_string<char,stlpd_std::char_traits<char>,stlpd_std::allocator<char> > & sIpAddr="10.78.20.224", int iNumOfThreads=5, int iConnectionLimit=100, int iMaxMsgLen=5000000) Line 191 C++
RCFServerAdapter.dll!RCFServerAdapter::CreateRCFServer(unsigned int nPort=5002, const stlpd_std::basic_string<char,stlpd_std::char_traits<char>,stlpd_std::allocator<char> > & sIpAddr="10.78.20.224", int iNumOfThreads=5, int iConnectionLimit=100, int iMaxMsgLen=5000000) Line 62 + 0x20 bytes C++
MSMPServer.exe!CMSMPModule::OnStart() Line 67 + 0x69 bytes C++
MSMPServer.exe!CModuleBase::Start() Line 118 + 0xf bytes C++
MSMPServer.exe!CMSMPService::ServiceMain(unsigned long dwArgc=0, char * * lpszArgv=0x00000000) Line 88 + 0x15 bytes C++
MSMPServer.exe!CNTService::Debug() Line 1329 + 0x14 bytes C++
MSMPServer.exe!CNTService::ProcessShellCommand(CNTServiceCommandLineInfo & rCmdInfo={...}) Line 1529 + 0xf bytes C++
MSMPServer.exe!ServerMain(int argc=2, char * * argv=0x0335c318) Line 34 + 0x1b bytes C++
MSMPServer.exe!main(int argc=2, char * * argv=0x0335c318) Line 52 + 0xd bytes C++
MSMPServer.exe!__tmainCRTStartup() Line 582 + 0x19 bytes C
MSMPServer.exe!mainCRTStartup() Line 399 C
kernel32.dll!7c817077()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
modified on Wednesday, April 6, 2011 9:05 PM
|
|
|
|

|
Hi, This is an issue with STLPort - you can email me for a patch. Regards, Jarl
|
|
|
|

|
The patch is ok, thank you!
|
|
|
|

|
ok so i have read the procedure to build the lib from here,
http://deltavsoft.com/w/RcfUserGuide/1.3/rcf_user_guide/Building.html#rcf_user_guide.Building.Configuration
But in the distribution src there is nothing to compile RCF.cpp! I mean No makefile or vc file. So i created a new static lib project in VC9 and added RCF.cpp to the source. I edited this file and added
#define RCF_USE_BOOST_THREADS
#define RCF_USE_BOOST_ASIO
#define RCF_USE_BOOST_SERIALIZATION
#define RCF_USE_IPV6
I have boost 1_45_0, so i added it in the include/linker additional directories too. I build the lib and there is no problem. Now i want to run the demo in "D:\RCF-1.3\demo\vs2003\RCF" which is a client and server demo. I specify the RCF.lib and there is no problem compiling it. However it am not able to link it and i get the attached linker errors, what exactly am i supposed to do? It looks like it is missing some function that are not linked into the static lib.
Server.obj : error LNK2019: unresolved external symbol "public: __thiscall SF::Archive::Archive(enum SF::Archive::Direction,class SF::IStream *)" (??0Archive@SF@@QAE@W4Direction@01@PAVIStream@1@@Z) referenced in function "public: class SF::WithSemanticsRead & __thiscall SF::WithSemanticsRead::operator>><class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >(class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > &)" (??$?5V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@WithSemanticsRead@SF@@QAEAAV01@AAV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: __thiscall SF::DataPtr::~DataPtr(void)" (??1DataPtr@SF@@QAE@XZ) referenced in function "public: __thiscall SF::Archive::~Archive(void)" (??1Archive@SF@@QAE@XZ)
1>Server.obj : error LNK2019: unresolved external symbol "public: void __thiscall SF::Archive::setFlag(enum SF::Archive::Flag,bool)" (?setFlag@Archive@SF@@QAEXW4Flag@12@_N@Z) referenced in function "void __cdecl SF::invokePtrSerializer<class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const *>(class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const *,class SF::Archive &)" (??$invokePtrSerializer@PBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@SF@@YAXPBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@AAVArchive@0@@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: void __thiscall SF::SerializerBase::invoke(class SF::Archive &)" (?invoke@SerializerBase@SF@@QAEXAAVArchive@2@@Z) referenced in function "void __cdecl SF::invokeCustomSerializer<class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >(class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > * *,class SF::Archive &,int)" (??$invokeCustomSerializer@V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@SF@@YAXPAPAV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@AAVArchive@0@H@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall SF::SerializerBase::~SerializerBase(void)" (??1SerializerBase@SF@@UAE@XZ) referenced in function "public: virtual __thiscall SF::Serializer<class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >::~Serializer<class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >(void)" (??1?$Serializer@V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@SF@@UAE@XZ)
1>Server.obj : error LNK2019: unresolved external symbol "public: __thiscall SF::SerializerBase::SerializerBase(void)" (??0SerializerBase@SF@@QAE@XZ) referenced in function "public: __thiscall SF::Serializer<class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >::Serializer<class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >(class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > * *)" (??0?$Serializer@V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@SF@@QAE@PAPAV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: static class SF::Registry & __cdecl SF::Registry::getSingleton(void)" (?getSingleton@Registry@SF@@SAAAV12@XZ) referenced in function "private: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SF::Serializer<class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >::getTypeName(void)" (?getTypeName@?$Serializer@V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@SF@@EAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
1>Server.obj : error LNK2019: unresolved external symbol "public: bool __thiscall SF::Registry::isTypeRegistered(class type_info const &)" (?isTypeRegistered@Registry@SF@@QAE_NABVtype_info@@@Z) referenced in function "private: virtual bool __thiscall SF::Serializer<class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >::isDerived(void)" (?isDerived@?$Serializer@V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@SF@@EAE_NXZ)
1>Server.obj : error LNK2019: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SF::Registry::getTypeName(class type_info const &)" (?getTypeName@Registry@SF@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABVtype_info@@@Z) referenced in function "private: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall SF::Serializer<class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >::getDerivedTypeName(void)" (?getDerivedTypeName@?$Serializer@V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@SF@@EAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
1>Server.obj : error LNK2019: unresolved external symbol "public: void __thiscall RCF::RcfBoostThreads::boost::detail::condition_impl::notify_all(void)" (?notify_all@condition_impl@detail@boost@RcfBoostThreads@RCF@@QAEXXZ) referenced in function "public: void __thiscall RCF::RcfBoostThreads::boost::condition::notify_all(void)" (?notify_all@condition@boost@RcfBoostThreads@RCF@@QAEXXZ)
1>Server.obj : error LNK2019: unresolved external symbol "public: __thiscall RCF::RcfBoostThreads::boost::lock_error::lock_error(void)" (??0lock_error@boost@RcfBoostThreads@RCF@@QAE@XZ) referenced in function "public: void __thiscall RCF::RcfBoostThreads::boost::detail::thread::scoped_lock<class RCF::RcfBoostThreads::boost::mutex>::lock(void)" (?lock@?$scoped_lock@Vmutex@boost@RcfBoostThreads@RCF@@@thread@detail@boost@RcfBoostThreads@RCF@@QAEXXZ)
1>Server.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall RCF::RcfBoostThreads::boost::lock_error::~lock_error(void)" (??1lock_error@boost@RcfBoostThreads@RCF@@UAE@XZ)
1>Server.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall RCF::RcfBoostThreads::boost::thread_exception::~thread_exception(void)" (??1thread_exception@boost@RcfBoostThreads@RCF@@UAE@XZ) referenced in function "public: virtual void * __thiscall RCF::RcfBoostThreads::boost::thread_exception::`scalar deleting destructor'(unsigned int)" (??_Gthread_exception@boost@RcfBoostThreads@RCF@@UAEPAXI@Z)
1>Server.obj : error LNK2001: unresolved external symbol "public: virtual char const * __thiscall RCF::RcfBoostThreads::boost::lock_error::what(void)const " (?what@lock_error@boost@RcfBoostThreads@RCF@@UBEPBDXZ)
1>Server.obj : error LNK2019: unresolved external symbol "private: void __thiscall RCF::RcfBoostThreads::boost::mutex::do_lock(void)" (?do_lock@mutex@boost@RcfBoostThreads@RCF@@AAEXXZ) referenced in function "public: static void __cdecl RCF::RcfBoostThreads::boost::detail::thread::lock_ops<class RCF::RcfBoostThreads::boost::mutex>::lock(class RCF::RcfBoostThreads::boost::mutex &)" (?lock@?$lock_ops@Vmutex@boost@RcfBoostThreads@RCF@@@thread@detail@boost@RcfBoostThreads@RCF@@SAXAAVmutex@456@@Z)
1>Server.obj : error LNK2019: unresolved external symbol "private: void __thiscall RCF::RcfBoostThreads::boost::mutex::do_unlock(void)" (?do_unlock@mutex@boost@RcfBoostThreads@RCF@@AAEXXZ) referenced in function "public: static void __cdecl RCF::RcfBoostThreads::boost::detail::thread::lock_ops<class RCF::RcfBoostThreads::boost::mutex>::unlock(class RCF::RcfBoostThreads::boost::mutex &)" (?unlock@?$lock_ops@Vmutex@boost@RcfBoostThreads@RCF@@@thread@detail@boost@RcfBoostThreads@RCF@@SAXAAVmutex@456@@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: __thiscall SF::Archive::Archive(enum SF::Archive::Direction,class SF::OStream *)" (??0Archive@SF@@QAE@W4Direction@01@PAVOStream@1@@Z) referenced in function "public: class SF::WithSemanticsWrite & __thiscall SF::WithSemanticsWrite::operator<<<class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >(class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const &)" (??$?6V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@WithSemanticsWrite@SF@@QAEAAV01@ABV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: bool __thiscall SF::Archive::isWrite(void)const " (?isWrite@Archive@SF@@QBE_NXZ) referenced in function "void __cdecl SF::serializeStlContainer<class SF::PushBackSemantics,class SF::ReserveSemantics,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >(class SF::Archive &,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > &)" (??$serializeStlContainer@VPushBackSemantics@SF@@VReserveSemantics@2@V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@SF@@YAXAAVArchive@0@AAV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: bool __thiscall SF::Archive::verifyAgainstArchiveSize(unsigned int)" (?verifyAgainstArchiveSize@Archive@SF@@QAE_NI@Z) referenced in function "void __cdecl SF::serializeStlContainer<class SF::PushBackSemantics,class SF::ReserveSemantics,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >(class SF::Archive &,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > &)" (??$serializeStlContainer@VPushBackSemantics@SF@@VReserveSemantics@2@V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@SF@@YAXAAVArchive@0@AAV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: bool __thiscall SF::Archive::isRead(void)const " (?isRead@Archive@SF@@QBE_NXZ) referenced in function "void __cdecl SF::serializeStlContainer<class SF::PushBackSemantics,class SF::ReserveSemantics,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >(class SF::Archive &,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > &)" (??$serializeStlContainer@VPushBackSemantics@SF@@VReserveSemantics@2@V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@SF@@YAXAAVArchive@0@AAV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: void __thiscall SF::OStream::put(class SF::DataPtr const &)" (?put@OStream@SF@@QAEXABVDataPtr@2@@Z) referenced in function "void __cdecl SF::serializeFundamental<unsigned int>(class SF::Archive &,unsigned int &,unsigned int)" (??$serializeFundamental@I@SF@@YAXAAVArchive@0@AAII@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: class SF::OStream * __thiscall SF::Archive::getOstream(void)const " (?getOstream@Archive@SF@@QBEPAVOStream@2@XZ) referenced in function "void __cdecl SF::serializeFundamental<unsigned int>(class SF::Archive &,unsigned int &,unsigned int)" (??$serializeFundamental@I@SF@@YAXAAVArchive@0@AAII@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: bool __thiscall SF::IStream::get(class SF::DataPtr &)" (?get@IStream@SF@@QAE_NAAVDataPtr@2@@Z) referenced in function "void __cdecl SF::serializeFundamental<unsigned int>(class SF::Archive &,unsigned int &,unsigned int)" (??$serializeFundamental@I@SF@@YAXAAVArchive@0@AAII@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: __thiscall SF::DataPtr::DataPtr(void)" (??0DataPtr@SF@@QAE@XZ) referenced in function "void __cdecl SF::serializeFundamental<unsigned int>(class SF::Archive &,unsigned int &,unsigned int)" (??$serializeFundamental@I@SF@@YAXAAVArchive@0@AAII@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: class SF::IStream * __thiscall SF::Archive::getIstream(void)const " (?getIstream@Archive@SF@@QBEPAVIStream@2@XZ) referenced in function "void __cdecl SF::serializeFundamental<unsigned int>(class SF::Archive &,unsigned int &,unsigned int)" (??$serializeFundamental@I@SF@@YAXAAVArchive@0@AAII@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: unsigned int __thiscall SF::OStream::writeRaw(char const *,unsigned int)" (?writeRaw@OStream@SF@@QAEIPBDI@Z) referenced in function "void __cdecl SF::serializeString<char,struct std::char_traits<char>,class std::allocator<char> >(class SF::Archive &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)" (??$serializeString@DU?$char_traits@D@std@@V?$allocator@D@2@@SF@@YAXAAVArchive@0@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>Server.obj : error LNK2019: unresolved external symbol "public: unsigned int __thiscall SF::IStream::read(char *,unsigned int)" (?read@IStream@SF@@QAEIPADI@Z) referenced in function "void __cdecl SF::serializeString<char,struct std::char_traits<char>,class std::allocator<char> >(class SF::Archive &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)" (??$serializeString@DU?$char_traits@D@std@@V?$allocator@D@2@@SF@@YAXAAVArchive@0@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>Debug/Server.exe : fatal error LNK1120: 27 unresolved externals
|
|
|
|

|
Just compile RCF.cpp into the client and server executables - that's easier than building a separate library.
If you do want to build a library, you need to specify the same defines for the library, as for the executable. Rather than editing RCF.cpp, you should set the defines via compiler flags. With VS, you can set them them via Project Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions.
Regards,
Jarl.
|
|
|
|

|
Hi Jarl
Nice framework I am trying to implement Client/Server communication using the Publish/subscribe mechanism.
It is up an running, but I am experiencing delays in the communication. The server publishes data to the client every 100 ms. But it seams like the publish method waits for an ACK from the previous publish call. I conclude this from a wireshark capture where I can see that the ack from the client is delayed 200 ms. 1 ms later the sever sends the next publish.
Is it possible to make the server publish/send with out waiting for the previous ACK? Or is it possible to disable the delay on the ACK?
Jesper
|
|
|
|
|

|
Hi Jarl,
I've met a problem, in RCF, the interface seems to support only 35 functions, if I have more than 35 functions, I have to split them into different interfaces. Is there some method to make one interface supporting more than 35 functions?
with regards,
from Lishu
|
|
|
|

|
Hi Lishu,
RCF 1.3 will be released in a week or so, and will support up to 100 functions in a single RCF interface.
Regards,
Jarl.
|
|
|
|

|
Thank you, 100 functions, I think it's enough.
But this limitation seems to be unnecessary, I mean why there should be a limit? any benefit?
|
|
|
|

|
The functions in a RCF interface are numbered, starting from 0, and when you make a remote call, the function number is used to identify which function the client wants to call.
Generating the id numbers automatically from the interface definition is a bit tricky, and there is a macro in /include/RCF/Idl.hpp that does this. I couldn't think of a way of doing it that would support an unlimited number of functions, so that's why there is a limit.
Regards,
Jarl.
|
|
|
|

|
Hello,
I've added a publisher and subscriber according to your samples, and I get connection/disconnection notification.
How can I send something in response to client in function which I set by setOnConnectCallback?
Or it should be designed in some other way? What I want is to send a piece of information to the client when server gets subscription notification.
Another question, how can I identify what client has been subscribed to the publishing service?
Thanks.
|
|
|
|

|
If your client needs a particular piece of information when it begins to subscribe, you can have it make a regular remote call, before it calls beginSubscribe().
On the server-side, to know who is subscribing, you can use the callback you specify in setOnConnectCallback(). One of the arguments it receives is the RcfSession of the subscriber, and you can then call RcfSession::getRemoteAddress() to determine the network address of the subscriber (see test/Test_ClientInfo.cpp for some code calling getRemoteAddress()).
Regards,
Jarl.
|
|
|
|

|
Hello,
Can I setup RCF client/server communication to support SSL mutual authentication?
Thanks for a great work.
|
|
|
|

|
The SchannelFilter class supports mutual authentication - you can set the client-side certificate using SchannelFilter::setClientCertificate(). Have a look in Test_Schannel.cpp for an example.
If you're using OpenSSL instead, the OpenSslFilterEncryptionFilter class also supports mutual authentication. You can pass the client-side certificate to the OpenSslEncryptionFilter constructor (see Test_OpenSslFilter.cpp).
Regards,
Jarl.
|
|
|
|

|
So far so good, thanks.
How can I force my server to accept only SSL connections? I'm using Windows Named Pipe transport, and client which doesn't support SSL still is able to connect to the server.
Thanks.
|
|
|
|
|

|
Jarl,
Can you help me with this?
I keep running into a segfault (CentOS5.4 x64) during the serialization.
The code used to work on 32 bit.
Does RCF 1.1 support 64bit?
I am using -DRCF_USE_BOOST_THREADS -DRCF_USE_BOOST_ASIO
and boost 1_41
Here is the call stack.
The problem is very consistent. Any help is greatly appreciated.
Program received signal SIGSEGV, Segmentation fault.
0x00002b6b5cf8ad1b in SF::SerializerBase::invokeWrite (this=0x7fff30163f90, ar=@0x7fff30164630)
at /packages/RCF-1.1/src/RCF/../SF/Serializer.cpp:157
157 dynamic_cast<WithFormatWrite*>(ar.getStream())->begin(in);
(gdb) bt
#0 0x00002b6b5cf8ad1b in SF::SerializerBase::invokeWrite (this=0x7fff30163f90, ar=@0x7fff30164630)
at /packages/RCF-1.1/src/RCF/../SF/Serializer.cpp:157
#1 0x00002b6b5cf9dd0d in SF::SerializerBase::invoke (this=0x7fff30163f90, ar=@0x7fff30164630)
at /packages/RCF-1.1/src/RCF/../SF/Serializer.cpp:187
#2 0x00002b6b5d18ec0a in SF::invokeCustomSerializer<bool> (ppt=0x7fff30164028, ar=@0x7fff30164630)
at /packages/RCF-1.1/include/SF/Serializer.hpp:172
#3 0x00002b6b5d18ec68 in SF::invokeSerializer<bool const*, bool> (u=@0x7fff30164028, ar=@0x7fff30164630)
at /packages/RCF-1.1/include/SF/Serializer.hpp:187
#4 0x00002b6b5d18ec99 in SF::invokeSerializer<bool const*> (u=0x12383ab0, ar=@0x7fff30164630)
at /packages/RCF-1.1/include/SF/Serializer.hpp:204
#5 0x00002b6b5d18ecd3 in SF::invokePtrSerializer<bool const*> (u=0x12383ab0, ar=@0x7fff30164630)
at /packages/RCF-1.1/include/SF/Serializer.hpp:214
#6 0x00002b6b5d18ecf3 in SF::operator&<bool> (ar=@0x7fff30164630, t=@0x12383ab0)
at /packages/RCF-1.1/include/SF/Serializer.hpp:290
#7 0x00002b6b603fbccd in ExtClassConfig::serialize<SF::Archive> (this=0x12383a60, ar=@0x7fff30164630, version=0)
at /AnalyzerCommon/ExtClassConfig.hpp:130
#8 0x00002b6b603fbdc5 in SF::serializeInternal<ExtClassConfig> (archive=@0x7fff30164630, t=@0x12383a60, version=0)
at /packages/RCF-1.1/include/SF/Serializer.hpp:244
#9 0x00002b6b603fbdef in SF::serializeFundamentalOrNot<ExtClassConfig> (archive=@0x7fff30164630, t=@0x12383a60, version=0)
at /packages/RCF-1.1/include/SF/Serializer.hpp:256
#10 0x00002b6b603fbe1e in SF::serializeEnumOrNot<ExtClassConfig> (archive=@0x7fff30164630, t=@0x12383a60, version=0)
at /packages/RCF-1.1/include/SF/Serializer.hpp:269
#11 0x00002b6b603fbe48 in SF::serialize<SF::Archive, ExtClassConfig> (archive=@0x7fff30164630, t=@0x12383a60, version=0)
at /packages/RCF-1.1/include/SF/Serializer.hpp:276
#12 0x00002b6b603fbe70 in SF::preserialize<SF::Archive, ExtClassConfig> (ar=@0x7fff30164630, pt=@0x7fff30164d58, version=0)
at /packages/RCF-1.1/include/SF/Serializer.hpp:284
#13 0x00002b6b603fbe98 in SF::Serializer<ExtClassConfig>::serializeContents (this=0x7fff30164510, ar=@0x7fff30164630)
at /packages/RCF-1.1/include/SF/Serializer.hpp:357
#14 0x000000000069fcea in SF::SerializerBase::invokeWrite (this=0x7fff30164510, ar=@0x7fff30164630)
at /packages/RCF-1.1/src/RCF/../SF/Serializer.cpp:152
#15 0x00000000006a1233 in SF::SerializerBase::invoke (this=0x7fff30164510, ar=@0x7fff30164630)
at /packages/RCF-1.1/src/RCF/../SF/Serializer.cpp:187
#16 0x00002b6b603fbf04 in SF::invokeCustomSerializer<ExtClassConfig> (ppt=0x7fff30164d58, ar=@0x7fff30164630)
at /packages/RCF-1.1/include/SF/Serializer.hpp:172
#17 0x00002b6b603fbf65 in SF::invokeSerializer<ExtClassConfig* const*, ExtClassConfig> (u=@0x7fff301645a8, ar=@0x7fff30164630)
at /packages/RCF-1.1/include/SF/Serializer.hpp:194
#18 0x00002b6b603fbf97 in SF::invokeSerializer<ExtClassConfig* const*> (u=0x7fff30164d58, ar=@0x7fff30164630)
at /packages/RCF-1.1/include/SF/Serializer.hpp:204
#19 0x00002b6b603fbfd1 in SF::invokePtrSerializer<ExtClassConfig* const*> (u=0x7fff30164d58, ar=@0x7fff30164630)
at /packages/RCF-1.1/include/SF/Serializer.hpp:214
#20 0x00002b6b603fbff1 in SF::operator&<ExtClassConfig*> (ar=@0x7fff30164630, t=@0x7fff30164d58)
at /packages/RCF-1.1/include/SF/Serializer.hpp:290
#21 0x00002b6b60402b29 in SF::WithSemanticsWrite::operator<< <ExtClassConfig*> (this=0x1238ec20, t=@0x7fff30164d58)
at /packages/RCF-1.1/include/SF/Stream.hpp:181
#22 0x00002b6b60402ba1 in RCF::ProtocolImpl1<SF::IBinaryStream, SF::OBinaryStream>::Out::operator<< <ExtClassConfig*> (this=0x1238ec20,
t=@0x7fff30164d58) at /packages/RCF-1.1/include/RCF/Protocol/Protocol.hpp:146
#23 0x00002b6b60431887 in RCF::SerializationProtocolOut::write<ExtClassConfig*> (this=0x1238ebe8, t=@0x7fff30164d58)
at /packages/RCF-1.1/include/RCF/SerializationProtocol.hpp:177
#24 0x00002b6b60431e59 in RCF::serializeImpl<ExtClassConfig*> (out=@0x1238ebe8, t=@0x7fff30164d58)
at /packages/RCF-1.1/include/RCF/SerializationProtocol.hpp:255
#25 0x00002b6b60431e7e in RCF::serialize<ExtClassConfig*> (out=@0x1238ebe8, t=@0x7fff30164d58)
at /packages/RCF-1.1/include/RCF/SerializationProtocol.hpp:272
#26 0x00002b6b60431ead in RCF::serializeImpl<ExtClassConfig> (out=@0x1238ebe8, spt=@0x7fff30165bc0)
at /packages/RCF-1.1/include/RCF/Marshal.hpp:159
#27 0x00002b6b60431ed2 in RCF::serialize<boost::shared_ptr<ExtClassConfig> > (out=@0x1238ebe8, t=@0x7fff30165bc0)
at /packages/RCF-1.1/include/RCF/SerializationProtocol.hpp:272
#28 0x00002b6b60431ef4 in RCF::serializeImpl<ExtClassConfig> (out=@0x1238ebe8, spt=0x7fff30165bc0)
at /packages/RCF-1.1/include/RCF/Marshal.hpp:140
#29 0x00002b6b60431f1b in RCF::serialize<boost::shared_ptr<ExtClassConfig>*> (out=@0x1238ebe8, t=@0x7fff30164df8)
at /packages/RCF-1.1/include/RCF/SerializationProtocol.hpp:272
#30 0x00002b6b60431f46 in RCF::Proxy_Ref<boost::shared_ptr<ExtClassConfig>&>::write (this=0x12390570, out=@0x1238ebe8)
at /packages/RCF-1.1/include/RCF/Marshal.hpp:735
#31 0x00002b6b60431f69 in RCF::ClientParameters<EnCSessionInfo, boost::shared_ptr<ExtClassConfig>&, RCF::Void, RCF::Void, RCF::Void, RCF::Void, RCF::Void, RCF::Void, RCF::Void>::write (this=0x12390560, out=@0x1238ebe8)
at /packages/RCF-1.1/include/RCF/Marshal.hpp:988
#32 0x00000000006f4275 in RCF::ClientStub::init (this=0x1238e9a0, subInterface=@0x7fff30164ff0, fnId=0, rcs=RCF::Twoway)
at /packages/RCF-1.1/src/RCF/Marshal.cpp:102
#33 0x00002b6b60437d70 in FutureImpl (this=0x7fff301650e0, t=@0x12390568, clientStub=@0x1238e9a0, subInterface=@0x7fff30164ff0, fnId=0, rcs=RCF::Twoway)
at /packages/RCF-1.1/include/RCF/Marshal.hpp:1383
#34 0x00002b6b60437eb0 in RcfClient<I_ExtractClassifier>::InitEnC (this=0x1238e310, callOptions=@0x7fff30165040,
a1=@0x7fff30165bc0) at /AnalyzerCommon/I_ExtractClassifier.hpp:40
#35 0x00002b6b60437f1a in RcfClient<I_ExtractClassifier>::InitEnC (this=0x1238e310, a1=@0x7fff30165bc0)
at /AnalyzerCommon/I_ExtractClassifier.hpp:40
#36 0x00002b6b6043f4b3 in EnCSvrProxy::InitEnC (this=0x1238dd70, config={px = 0x7fff30165bc0, pn = {pi_ = 0x1238dd70}})
at /AnalyzerImpl/EnCSvrProxy.h:66
#37 0x00002b6b604549a7 in EnCSvrProxy::StartEnCServer (this=0x1238dd70, config={px = 0x7fff30165fe0, pn = {pi_ = 0x1238dd70}}, udpPort=44389)
at /AnalyzerImpl/EnCSvrProxy.cpp:180
Thanks in advance!!
|
|
|
|

|
Hi,
RCF 1.1 definitely supports 64 bit compilers. Which compiler are you using?
The call stack indicates a crash at Serializer.cpp:157. Right before that line, could you add this code:
WithFormatWrite* pWfw = dynamic_cast(ar.getStream());
, and check that pWfw is non-NULL?
Regards,
Jarl
|
|
|
|

|
Jarl,
Thank you for getting back to me.
Let me check that.
BTW, I found a possible culprit. My code is also linking to another xyz.so which uses libboost_serialization-mt.so.1.41.0.
The problem went away when I stopped linking to that.
Is it possible that there is a bug if the same process loads both the RCF and boost serialization? (I am not using boost serialization in RCF)
$ ldd xyz.so
liblog4cxx.so.10 => /
libssh2.so.1 => /usr/lib64/libs
libstdc++.so.6 => /usr/lib64/li
libm.so.6 => /lib64/libm.so.6 (
libgcc_s.so.1 => /lib64/libgcc_
libc.so.6 => /lib64/libc.so.6 (
libboost_date_time-mt.so.1.41.0
libboost_iostreams-mt.so.1.41.0
libboost_system-mt.so.1.41.0 =>
libboost_thread-mt.so.1.41.0 =>
libboost_filesystem-mt.so.1.41.
libboost_program_options-mt.so.
libboost_serialization-mt.so.1.
libboost_signals-mt.so.1.41.0 =
libpthread.so.0 => /lib64/libpt
libdl.so.2 => /lib64/libdl.so.2
libicuuc.so.40 => /
libicudata.so.40 => /
libaprutil-1.so.0 => /usr/lib64
libexpat.so.1 => not found
libapr-1.so.0 => /usr/lib64/lib
libuuid.so.1 => /lib64/libuuid.
librt.so.1 => /lib64/librt.so.1
libcrypt.so.1 => /lib64/libcryp
libssl.so.6 => /lib64/libssl.so
libcrypto.so.6 => /lib64/libcry
libz.so.1 => /usr/lib64/libz.so
/lib64/ld-linux-x86-64.so.2 (0x
libbz2.so.1 => /usr/lib64/libbz
libldap-2.3.so.0 => /usr/lib64/
liblber-2.3.so.0 => /usr/lib64/
libdb-4.3.so => /lib64/libdb-4.
libpq.so.4 => /usr/lib64/libpq.
libsqlite3.so.0 => /usr/lib64/l
libexpat.so.0 => /lib64/libexpa
libgssapi_krb5.so.2 => /usr/lib
libkrb5.so.3 => /usr/lib64/libk
libcom_err.so.2 => /lib64/libco
libk5crypto.so.3 => /usr/lib64/
libresolv.so.2 => /lib64/libres
libsasl2.so.2 => /usr/lib64/lib
libnsl.so.1 => /lib64/libnsl.so
libkrb5support.so.0 => /usr/lib
libkeyutils.so.1 => /lib64/libk
libselinux.so.1 => /lib64/libse
libsepol.so.1 => /lib64/libsepo
|
|
|
|

|
Hi,
There should be no problem loading RCF and Boost.Serialization into the same process. RCF won't even be aware of Boost.Serialization. , unless you've defined RCF_USE_BOOST_SERIALIZATION.
You may want to check that the libraries you build that use RCF, are defining the same set of RCF_USE_*** defines.
Regards,
Jarl.
|
|
|
|

|
Hi Jarl,
Server refuses to responding to client's new connection request when the cable is pulled out or the etheral swither is rebooted, we have to reboot the server to resolve this problem. The platform is SUN Solaris 10, Sparc architecture.
|
|
|
|

|
Hi,
Have you tried calling disconnect() and connect() on the client side?
RcfClient<I_X> client(...);
client.SomeFunc();
// network cable pulled from server
client.getClientStub().disconnect();
client.getClientStub().connect();
client.SomeFunc();
RCF doesn't implement automatic pinging of the client connection, so if you pull the cable out of the server, it's not possible for the client to know about it. If the client tries to make a call, it will eventually timeout. If you need to know right away if the server is still contactable, you would need to set short timeouts and then ping the server yourself:
client.getClientStub().setRemoteCallTimeoutMs(2000);
client.getClientStub().ping();
Regards,
Jarl
|
|
|
|

|
Hi,
The problem is nothing about the original client, the key point is that all new launched clients can not connect to the server forever.The only one solution to this problem is just reboot the server.It seems that the server refuses to accept new connect requestion( the socket accept function does not receive new incoming connection), but it still listens on the specifed TCP port.
|
|
|
|

|
OK... If you restart the server process, does it then accept new client connections, or are you actually rebooting the server machine?
Have you tested that you can reconnect to other network services on the same machine (e.g. a web server), after pulling the network cable?
Regards,
Jarl
|
|
|
|

|
After pulling out the network cable, waiting for some minutes and then plugging in the calbe, the server process no longer receives new client connection,but other services in the server machine are still active, we can telnet or login in the server machine remotely.
When the problem appears, We just need to restart the server process and then all new launched clients can connect to the server again, there is no need to reboot the server machine.
|
|
|
|

|
Thanks for the info. One more question: if you have your RCF server running on e.g. port 1234, and you then pull out the network cable and re-insert it, are you able to run telnet from the client machine and connect to port 1234?
|
|
|
|
 |
|
|
General News Suggestion Question Bug Answer Joke Rant Admin
|
A server/client IPC framework, using the C++ preprocessor as an IDL compiler.
| Type | Article |
| Licence | CPOL |
| First Posted | 23 Dec 2005 |
| Views | 575,611 |
| Downloads | 5,981 |
| Bookmarked | 305 times |
|
|