Re: WinSock SendData -> unknown Exception




On Tue, 19 Feb 2008 00:24:59 -0800 (PST), clinisbut <clinisbut@xxxxxxxxx> wrote:

On Feb 18, 6:50 pm, Joseph M. Newcomer <newco...@xxxxxxxxxxxx> wrote:
I would not use a timeSetEvent callback to handle socket communication.  Because there
should be no serious time constraints for TCP/IP or UDP communication, I wouldn't use
anything more sophisticated than a SetTimer() call.

Note that you *can* use a socket in a separate thread (see my essay on multithreaded
sockets), but it involves giving complete control of the socket to the thread, and never
again using the socket from any other thread, including the thread that created it.
                                        joe



On Mon, 18 Feb 2008 07:52:23 -0800 (PST), clinisbut <clinis...@xxxxxxxxx> wrote:
On Feb 18, 4:31 pm, Joseph M. Newcomer <newco...@xxxxxxxxxxxx> wrote:
It turns out that the timeSetEvent documentation does not say that the callback occurs in
a separate thread.  This is a documentation failure, because the callback really is called
in a separate thread.
                                        joe

On Mon, 18 Feb 2008 04:08:00 -0800 (PST), clinisbut <clinis...@xxxxxxxxx> wrote:
On Feb 16, 2:00 am, Joseph M. Newcomer <newco...@xxxxxxxxxxxx> wrote:
I question the fundamental decision to use an ActiveX control to do something as simple as
socket handling.  I believe the control does synchronous I/O.

Yeah, sure! but does another issue...

Could you report ALL the values of the COleDispatchException object?  Most especially the
m_wCode.
m_wCode = 0

I think that's the only value I've left behind.

I'm having another trouble and is happening when I call the same
function from a multimedia timer. But this time I'm getting a "First
chance exception in XXX.exe (MSWINSCK.OCX): 0xC0000005: Access
Violation".

I think it has to do with the variant type. Debugging this last error,
I found that program crashes in function (called automatically from
mWinsock.sendData):

  void COleDispatchDriver::InvokeHelperV(DISPID dwDispID, WORD
wFlags,     VARTYPE vtRet, void* pvRet, const BYTE* pbParamInfo, va_list
argList)
  {
     //BLABLABLABLA
           SCODE sc = m_lpDispatch->Invoke(dwDispID, IID_NULL, 0, wFlags,
&dispparams, pvarResult, &excepInfo, &nArgErr); //<---This is where
error occours!!!
  }

Maybe has something to do with MMTimer? this is how I implement it:
void CALLBACK CUart3Dlg::StartTimer( UINT wTimerID, UINT msg, DWORD
dwUser, DWORD dw1, DWORD dw2 )
{
   CUart3Dlg* obj = (CUart3Dlg*) dwUser;
       obj->Timer_SendData( wTimerID );
}

void CUart3Dlg::Timer_SendData( UINT wTimerID )
{
   if( buffer_out.size() > 0 )
   {
           if( ui_retry_counter<MAX_RETRY_COUNT )
           {
                   //Some operations
           }
           else
           {
                      std::vector<unsigned char> out_tcp;
                      //fead out_tcp with data
                      //...........
                   Send_TCP( out_tcp );   <--This calls my m_Winsock.sendData( v );
           }
   }
}

Joseph M. Newcomer [MVP]
email: newco...@xxxxxxxxxxxx
Web:http://www.flounder.com
MVP Tips:http://www.flounder.com/mvp_tips.htm

So will have similar problems using CAsynsocket?? What you suggest
then to work with sockets?

Joseph M. Newcomer [MVP]
email: newco...@xxxxxxxxxxxx
Web:http://www.flounder.com
MVP Tips:http://www.flounder.com/mvp_tips.htm

I don't use MMTimer to manage socket communication, but serial comm.
Every X ms I'm sending a frame through serial, and if a specific
condition is true before that sending, I send a socket to a client
informing that "problem". That's 'cause I use MMTimer, to control
frame sending to serial comm.
Maybe when this condition is true could I send a message to main GUI
thread to send that socket?
***
If youare not using a multimedia timer to manage your communication, why did you say

I'm having another trouble and is happening when I call the same
function from a multimedia timer.

That sounds to me like you are calling your serial communication object from some other
thread.

If you are using a mmtimer to send a message to the main GUI thread, why not just use
SetTimer/WM_TIMER to handle it? (note: there may be a valid reason, but I want to hear
from you why you decided not to use a multimedia timer instead of a simple WM_TIMER)
joe
****
Joseph M. Newcomer [MVP]
email: newcomer@xxxxxxxxxxxx
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
.



Relevant Pages

  • Re: TCP Streams from Unknown source to VB.Net
    ... communicate with any types of other platforms on TCP/IP communication. ... the data structure is sent in binary format out over a socket. ... can't contain arrays. ... from the server. ...
    (microsoft.public.dotnet.framework.remoting)
  • Re: Handling exceptions in Socket Callbacks
    ... why im using this complicated method of socket communication - ... there remains the problem of propogating the error generated in the callback ... > catch(Exception objException) ...
    (microsoft.public.dotnet.general)
  • Another question about OpenOffice (and component based programming in general)
    ... if my program is going to connect the OO server via socket 8100 ... there is some sort of communication going on. ... If pipe: what is the name of the pipe? ...
    (comp.lang.java.programmer)
  • Re: Handling exceptions in Socket Callbacks
    ... You're correct the asynchronous socket methods give more opportunities ... I always handle exceptions in callbacks in the callback itself. ... why im using this complicated method of socket communication - ...
    (microsoft.public.dotnet.general)
  • Re: Asynchronous Programming
    ... .Net must be using fibers or something. ... >> socket per thread that reads N number of packets. ... >> William Stacey, MVP ...
    (microsoft.public.dotnet.languages.csharp)