Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

CSocket Getting Network failures

Posted on 1998-08-03
3
269 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

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
format the code in java 6 101
haveThree challenge 22 121
Line meaning 9 87
Is there a simple front-end menu system. 9 102
Introduction: Dialogs (1) modal - maintaining the database. Continuing from the ninth article about sudoku.   You might have heard of modal and modeless dialogs.  Here with this Sudoku application will we use one of each type: a modal dialog …
Have you tried to learn about Unicode, UTF-8, and multibyte text encoding and all the articles are just too "academic" or too technical? This article aims to make the whole topic easy for just about anyone to understand.
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.
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

766 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