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:55:16 GMT
> 
> I am running it on vs .net 2003 ... could that be a problem then.
> I built the lib file using maven and set the linker to this lib file.

Could be, then again it might not.  We are not building or testing with
the VC 2003 compiler, there could be something there that is not
compatible.

> 
> I am running it on .net 2003
> 
> As I wrote earlier ....  an invalid handle is getting returned from
>         socket = SocketFactory::createSocket( properties );
> 
> And then it throws an exception on this line
>         // Cast it to an IO transport so we can wire up the socket
>         // input and output streams.
>         IOTransport* ioTransport = dynamic_cast<IOTransport*>( next );

I don't think this is really the problem, there is probably an exception
happening before this line that screws things up.  Generally the VC
debugger will stop on the line after the line where the exception is.
You should also examine the next pointer in the debugger to see what it
is really pointing too, if its not an IOTransport, then something has
gone terribly wrong.

> 
> What could be the reasons of getting an invalid handle from the
statement
>         socket = SocketFactory::createSocket( properties );

There are many reasons; one being that Winsock is retarded.  Like I said
earlier, I would step through the tcpsocket connect() to see where the
problem is occurring, there are several calls in there that could be
breaking.  

> 
> Regards
> 
> Lalit ....
> 
> tabish121 wrote:
> >
> >
> > 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.
> >
> >
> >
> 
> --
> View this message in context:
>
http://www.nabble.com/dynamic_cast%3CIOTransport%3E---bombs.-Socks-not-
> connecting---Invalid-handle-tf2225941.html#a6172794
> Sent from the ActiveMQ - User forum at Nabble.com.


Mime
View raw message