activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bish, Tim" <Tim.B...@Sensis.com>
Subject RE: Sockets not connecting ... Invalid handle returned
Date Wed, 06 Sep 2006 14:05:46 GMT

Sounds like for whatever reason a socket can't be opened to the broker.
You may have to step through the code in the tcpsocket::connect and see
what line is failing.  

The code from the website builds and runs fine here, you may need to
refresh your browser cache to see the latest, or go right to SVN and get
it from the examples folder in activemq-cpp.  There is a VC++ 2005
project file in there as well.  You can download 2005 for free, it may
be worth it to try that and see if there is something in the settings
that is different from yours.

> 
> Tim,
> 
> Actually my broker had gone down so i gave some wrong info ... problem
is
> something else, please go through this explanation of what i found.
> 
> If you look at the main function in the activemq-cpp client given on
our
> site
> I am just pasting it here now. It says.
> 
>     HelloWorldProducer producer( 1000 );
>         HelloWorldConsumer consumer( 5000 );
> 
>         // Start the consumer thread.
>         Thread consumerThread( &consumer );
>         consumerThread.start();
> 
>         // Start the producer thread.
>         Thread producerThread( &producer );
>         producerThread.start();
> 
>         // Wait for the threads to complete.
>         producerThread.join();
>         consumerThread.join();
> 
> When I debug the call goes to
>         socket->connect( host, port );     // this is inside the class
> bufferedsocket.cpp
> 
> after this it executes the connect method inside the class
tcpsocket.cpp
> but when the call comes out of this method it shows a INVALID HANDLE
in
> the
> debug variable socket value
> 
> Then from the producer call again goes to
> bufferedsocket.cpp and executes the
> socket->connect(host, port); method
> 
> AFter all this is done
> it bombs in the constructor of tcptransport.cpp
>         IOTransport* ioTransport = dynamic_cast<IOTransport*>( next );
> 
> and the value of the variable socket in debug mode at this point of
time
> before executing this statement is INVALID_SOCKET_HANDLE=???
> 
> Here is the exception then
> 
> - ex {message={"caught unknown exception"} stackTrace={first=???
last=???}
> }
> activemq::exceptions::ActiveMQException &
> - cms::CMSException {...} cms::CMSException
> + __vfptr 0x00484278 const
> activemq::exceptions::ActiveMQException::`vftable' *
> - message {"caught unknown exception"}
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> - std::_String_val<char,std::allocator<char> > {_Alval={...} }
> std::_String_val<char,std::allocator<char> >
>         std::_String_base {...} const std::_String_base
> + _Alval {...} std::allocator<char>
> - _Bx {_Buf=0x0069f9bc "po4" _Ptr=0x00346f70 "caught unknown
exception" }
> std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >::_Bxty
> + _Buf 0x0069f9bc "po4" char [16]
> - _Ptr 0x00346f70 "caught unknown exception" char *
>                 99 'c' char
>         _Mysize 24 unsigned int
>         _Myres 31 unsigned int
> - stackTrace {first=??? last=???}
>
std::vector<std::pair<std::basic_string<char,std::char_traits<char>,std:
:a
> llocator<char>
>
>,int>,std::allocator<std::pair<std::basic_string<char,std::char_traits<
ch
> ar>,std::allocator<char>
> >,int> > >
> -
>
std::_Vector_val<std::pair<std::basic_string<char,std::char_traits<char>
,s
> td::allocator<char>
>
>,int>,std::allocator<std::pair<std::basic_string<char,std::char_traits<
ch
> ar>,std::allocator<char>
> >,int> > > {_Alval={...} }
>
std::_Vector_val<std::pair<std::basic_string<char,std::char_traits<char>
,s
> td::allocator<char>
>
>,int>,std::allocator<std::pair<std::basic_string<char,std::char_traits<
ch
> ar>,std::allocator<char>
> >,int> > >
> - _Alval {...}
>
std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,s
td
> ::allocator<char>
> >,int> >
> 
>
std::_Allocator_base<std::pair<std::basic_string<char,std::char_traits<c
ha
> r>,std::allocator<char>
> >,int> > {...}
>
std::_Allocator_base<std::pair<std::basic_string<char,std::char_traits<c
ha
> r>,std::allocator<char>
> >,int> >
> - _Myfirst 0x00b82770
> {first={"D:\PCData\cpp2\activemq-cpp\win32-
> msvc\..\src\main\activemq\transport\TcpTransport.cpp"}
> second=59}
>
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<c
ha
> r>
> >,int> *
> + first
> {"D:\PCData\cpp2\activemq-cpp\win32-
> msvc\..\src\main\activemq\transport\TcpTransport.cpp"}
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
>         second 59 int
> - _Mylast 0x00b827b0 {first={???} second=3473784}
>
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<c
ha
> r>
> >,int> *
> - first {???}
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> + std::_String_val<char,std::allocator<char> > {_Alval={...} }
> std::_String_val<char,std::allocator<char> >
> + _Bx {_Buf=0x00b827b4 "<<<<" _Ptr=0xabababab <Bad Ptr> }
> std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >::_Bxty
>         _Mysize 32380142 unsigned int
>         _Myres 3529288 unsigned int
>         second 3473784 int
> - _Myend 0x00b827b0 {first={???} second=3473784}
>
std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<c
ha
> r>
> >,int> *
> - first {???}
> std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> + std::_String_val<char,std::allocator<char> > {_Alval={...} }
> std::_String_val<char,std::allocator<char> >
> + _Bx {_Buf=0x00b827b4 "<<<<" _Ptr=0xabababab <Bad Ptr> }
> std::basic_string<char,std::char_traits<char>,std::allocator<char>
> >::_Bxty
>         _Mysize 32380142 unsigned int
>         _Myres 3529288 unsigned int
>         second 3473784 int
> 
> I have attached the piece of code as a file. The one that i have got
> running
> on my machine (client example given on site - bit modified since on
the
> site
> it is outdated now).
> 
> Thanks
> 
> 
> Bish, Tim wrote:
> >
> > So there are two different threads in the example code (main.cpp),
each
> > of them creates a connection to the broker.  They each try and
connect
> > to the broker on the url "tcp://127.0.0.1:61613", so you need to
ensure
> > that you have the broker running on you local machine and have the
stomp
> > transport configured to be on port 61613, or you need to change this
to
> > be whatever ip and port the broker is at.
> >
> > Sounds like it fails on this call in each thread:
> >
> >             connection = connectionFactory->createConnection();
> >
> > So you need to debug what is breaking, the exception stack trace
should
> > give you some clues.  Either run in a console window or alter the
code
> > to grab this data and store it in a logfile or something.
> >
> >         }catch ( CMSException& e ) {
> >             e.printStackTrace();
> >         }
> >
> > You can use one of these methods from CMSException to do this
> >
> >         /**
> >          * Provides the stack trace for every point where
> >          * this exception was caught, marked, and rethrown.
> >          * @return vector containing stack trace strings
> >          */
> >         virtual std::vector< std::pair< std::string, int> >
> > getStackTrace() const = 0;
> >
> >         /**
> >          * Prints the stack trace to the given output stream.
> >          * @param stream the target output stream.
> >          */
> >         virtual void printStackTrace( std::ostream& stream ) const =
0;
> >
> >
> > Worse comes to worse you can step through the TcpSocket::connect
method
> > in the debugger to find out where exactly its breaking.
> >
> >>
> >> If you look at the main function in the activemq-cpp client given
on
> > our
> >> site
> >> I am just pasting it here now. It says.
> >>
> >>     HelloWorldProducer producer( 1000 );
> >> 	HelloWorldConsumer consumer( 5000 );
> >>
> >> 	// Start the consumer thread.
> >> 	Thread consumerThread( &consumer );
> >> 	consumerThread.start();
> >>
> >> 	// Start the producer thread.
> >> 	Thread producerThread( &producer );
> >> 	producerThread.start();
> >>
> >> 	// Wait for the threads to complete.
> >> 	producerThread.join();
> >> 	consumerThread.join();
> >>
> >> When I debug the call goes to
> >> connection = connectionFactory->createConnection(); // inside
> >> HelloWorldConsumer.cpp and HelloWorldProducer.cpp
> >>
> >> It runs this piece of code in turn ...
> >>     if( status < 0 ){
> >>         close();
> >>         throw SocketException( __FILE__, __LINE__,
> >>             "Socket::connect - %s", ::strerror( errno ) );
> >>     }
> >> and throws the exception ... from the class tcpsocket.cpp
> >>
> >>
> >>
> >> Bish, Tim wrote:
> >> >
> >> >>
> >> >> The following piece of code in the class SocketFactory.cpp is
> > throwing
> >> >> exceptions ....
> >> >>         BufferedSocket* socket = new BufferedSocket(tcpSocket,
> >> >> inputBufferSize, outputBufferSize);
> >> >>         socket->connect( host.c_str(), port );
> >> >>
> >> >> it returns an invalid handle actually. I can see the call coming
in
> >> > twice
> >> >> to
> >> >> this piece of code (producer and then the consumer ... both are
> >> > threaded
> >> >> and
> >> >> do a join inside the main method). The second time the call
comes
> > in
> >> > it
> >> >> bombs.
> >> >
> >> > It shouldn't be calling the socket factory twice, especially not
> > from
> >> > producer and consumer as they have nothing to do with the
sockets.
> >> >
> >> > What code are you trying to run?  Example?
> >> >
> >> > If you run from a command window, what is the error that is
printed
> > out?
> >> >
> >> >>
> >> >> Cant understand why this is happening ... any ideas on what
could
> > be
> >> > the
> >> >> reason.
> >> >> I tried changing the port to 61614 for the broker and the code
in
> > the
> >> >> client
> >> >> too ... did not work still ... same probs.
> >> >>
> >> >> Any hint would be really useful.
> >> >> --
> >> >> View this message in context: http://www.nabble.com/Sockets-not-
> >> >> connecting-...-Invalid-handle-returned-tf2225941.html#a6168387
> >> >> Sent from the ActiveMQ - User forum at Nabble.com.
> >> >
> >> >
> >> >
> >>
> >> --
> >> View this message in context: http://www.nabble.com/Sockets-not-
> >> connecting-...-Invalid-handle-returned-tf2225941.html#a6171212
> >> Sent from the ActiveMQ - User forum at Nabble.com.
> >
> >
> >
> 
> --
> View this message in context: http://www.nabble.com/Sockets-not-
> connecting-...-Invalid-handle-returned-tf2225941.html#a6171774
> Sent from the ActiveMQ - User forum at Nabble.com.


Mime
View raw message