Solved

CSocket Getting Network failures

Posted on 1998-08-03
3
264 Views
Last Modified: 2013-11-19
I've got a Server app where n clients can connect. I'm using a CMySocket class (derived from CSocket). I've implemented the CMySocket::OnClose( int nErrorCode ) handler. there i got notifications whenever the client or the server are gone (not normally terminated)
My question: how can i get a notification when i.e. the network is down? i did the following: on computer B I run
a client and connected it to the Server (running on comp. A) on comp. A I pulled out the network connector (simulate network failure). None of my two callback functions (either OnReceive(int nErrorCode) nor OnClose( int nErrorCode ) have been called. so how can i get notified about this event?
0
Comment
Question by:mruff
  • 2
3 Comments
 
LVL 2

Expert Comment

by:VEngineer
ID: 1320163

I did the same thing as you did, except I derived from class CAsyncSocket.  When I broke the network connection, function OnClose was called.
I'm not sure why it wouldn't do the same for any class derived from CSocket.

Could you post your class MySocket definition (if it isn't exceedingly large) so we can take a look?
0
 

Author Comment

by:mruff
ID: 1320164
hello VEngineer,
here's the class interface definition:

// clntsock.h : interface of the CClientSocket class
//

#ifndef __CLNTSOCK_H__
#define __CLNTSOCK_H__

class CMsg;
class CWallPanelServerDoc;

class CClientSocket : public CSocket
{
      DECLARE_DYNAMIC(CClientSocket);
private:
      CClientSocket(const CClientSocket& rSrc);         // no implementation
      void operator=(const CClientSocket& rSrc);  // no implementation

// Construction
public:
      CClientSocket(CWallPanelServerDoc* m_pDoc);

// Attributes
public:
      int m_nMsgCount;
      CSocketFile* m_pFile;
      CArchive* m_pArchiveIn;
      CArchive* m_pArchiveOut;
      CWallPanelServerDoc* m_pDoc;
      BOOL IsAborted() { return m_pArchiveOut == NULL; }

// Operations
public:
      void Init();
      void Abort();
      void SendMsg(CMsg* pMsg);
      void ReceiveMsg(CMsg* pMsg);

// Overridable callbacks
protected:
      virtual void OnReceive(int nErrorCode);
      virtual void OnClose( int nErrorCode );

// Implementation
public:
      virtual ~CClientSocket();

#ifdef _DEBUG
      virtual void AssertValid() const;
      virtual void Dump(CDumpContext& dc) const;
#endif

};

#endif // __CLNTSOCK_H__
0
 
LVL 2

Accepted Solution

by:
VEngineer earned 50 total points
ID: 1320165
I think that the problem lies in the implementation of class CSocket (which is beyond your control).  CSocket switches between non-blocking (asyncronous) and blocking mode (syncronous) under certain circumstances.  This blocking in class CSocket means that the socket keeps waiting for a message and does not send a notification until it recieves one (and it doesn't since it disconnects).

What you have to do is either fool around with CSocket's attributes until you get it to do pure non-blocking, or an easier solution, derive your class from CAsyncSocket, which is known to work properly for your desired application.

I don't work with CSocket a lot, so I'm not sure how to resolve your problem if you want to modify CSocket attributes.  Maybe someone else out here can help you with that if that is your desired track.

If you have further questions, go ahead and stick more comments to the end of this and I'll try to answer them as best I can.
0

Featured Post

Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Detect CR LF to each line 12 163
How to know only "File created" with EventLog 3 34
Message not shown 5 52
Problem to App 4 83
Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.

831 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question