Re: CSocket, best way to wait for a reply?
- From: "Scott McPhillips [MVP]" <org-dot-mvps-at-scottmcp>
- Date: Wed, 06 Apr 2005 17:13:53 -0500
simon wrote:
Hi,
I have a 'client' and a 'server', (both the same sub-classes of CSocket).
Basically the client sends a message to the server and in turn the server sends a message back to the client.
I allow a few seconds for the server to reply back to the client. Ideally it should not take more than a few milliseconds.
The client waits for it's reply, (recognized by a special header in the message).
So what I have is a function that does something like...
void MyMessage( void *pData, int nSize ) { pMySocket->Send( pData, nSize );
// wait for a reply from the server while( pMySocket->pReplyBuffer == NULL ){ sleep(0); // give time back to the queue // wait for a few seconds only }
// either timeout or no reply sent }
// The server then receives the message sent // sends a reply back to the client // who in turn fills the void *pReplyBuffer // // once "pReplyBuffer" is no longer NULL I know that data has returned.
But I have 2 problems
1) As you can see the wait is totally inadequate. it hangs the system. So what would be the best way to wait for a few seconds?
What I am doing now is ::PeekMessage( &msg, 0, 0, PR_REMOVE), but I don't feel good handling ALL the messages that way.
PeekMessages only for socket ones does not seem to work and still causes the system to hang.
2) Sometimes the Send(..) -> (who then calls the SendChunk() function), simply hangs and waits forever for the PumpMessages(FD_WRITE) to return.
What could I be doing wrong.
Many thanks
Simon
You are trying to write procedural code in an event-driven environment using an event-driven socket class. After you send you should simply return to MFC. If desired, you can also disable some controls and use SetTimer to detect a timeout in the response. But you must keep the MFC message loop running normally so your application will not appear "hung."
After a while, the OnReceive function in your socket class will be called with the response.
-- Scott McPhillips [VC++ MVP]
.
- References:
- CSocket, best way to wait for a reply?
- From: simon
- CSocket, best way to wait for a reply?
- Prev by Date: Re: CPU usage, memory and virtual memory
- Next by Date: Re: _mbsstr() does not detect CRLF combination in mulitbyte langua
- Previous by thread: Re: CSocket, best way to wait for a reply?
- Next by thread: Re: CSocket, best way to wait for a reply?
- Index(es):
Relevant Pages
|
Loading