activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From # Lalit Nagpal # <lalitte...@gmail.com>
Subject RE: Sockets not connecting ... Invalid handle returned
Date Wed, 06 Sep 2006 13:48:12 GMT


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::allocator<char>
>,int>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,int> > > 
-
std::_Vector_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,int>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,int> > > {_Alval={...} }
std::_Vector_val<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,int>,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,int> > > 
- _Alval {...}
std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,int> > 
       
std::_Allocator_base<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,int> > {...}
std::_Allocator_base<std::pair<std::basic_string<char,std::char_traits<char>,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<char>
>,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<char>
>,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<char>
>,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