EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: WINSOCK Error 10055
From: [email protected]
To: [email protected]
Date: Thu, 29 Jan 2004 10:26:36 +1100
G'day all,

I've been running some longevity tests on my Windows 2000 (SP 3) EPICS
environment in order to test some changes that I'm making to the MATLAB
Channel Access (MCA) tool.  Basically, I've been opening a channel, doing
some puts, closing the channel and repeating it over and over again.  The
IOC is running on a RedHat Linux 9.0 box.  I'm repeatedly finding that
after opening and closing the same channel about 70000 times my application
terminates with the following error:

"User specified timeout on IO operation expired"

In order to verify that this was not a problem introduced by me into MCA, I
wrote the following little program and ran it again:

***************************************************************************************************
#include "stdafx.h"
#include "cadef.h"
#include <iostream.h>

int main(int argc, char* argv[])
{

      int status;
      chid Chid;
      double val;

      status = ca_context_create(ca_enable_preemptive_callback);
      if (status != ECA_NORMAL) {
            cout << ca_message(status);
            cout.flush();
            exit(1);
      }

      for (int j = 1; j <= 100000; j++) {

            cout << j << "\n";
            cout.flush();

            status = ca_create_channel("epicsadminHost:xxxExample", 0, 0,
0, &Chid);
            if (status != ECA_NORMAL) {
                  cout << ca_message(status);
                  cout.flush();
                  exit(1);
            }

            status = ca_pend_io(1.0);
            if (status != ECA_NORMAL) {
                  cout << ca_message(status);
                  cout.flush();
                  exit(1);
            }

            for (int i = 0; i <= 10; i++) {

                  val = (double) i;

                  status = ca_array_put(DBR_DOUBLE, 1, Chid, &val);
                  if (status != ECA_NORMAL) {
                        cout << ca_message(status);
                        cout.flush();
                        exit(1);
                  }

                  status = ca_pend_io(1.0);
                  if (status != ECA_NORMAL) {
                        cout << ca_message(status);
                        cout.flush();
                        exit(1);
                  }
            }

            ca_clear_channel(Chid);
            if (status != ECA_NORMAL) {
                  cout << ca_message(status);
                  cout.flush();
                  exit(1);
            }
      }

      status = ca_task_exit();
      if (status != ECA_NORMAL) {
            cout << ca_message(status);
            cout.flush();
            exit(1);
      }

      return 0;
}
***************************************************************************************************

This still terminated at around 70000 channels, but this time the error was
a bit more informative:

Unable to connect because "WINSOCK Error 10055"
CA.Client.Exception...............................................
    Warning: "Virtual circuit disconnect"
    Context: "asiocfs:5064"
    Source File: ..\cac.cpp line 1515
    Current Time: Wed Jan 28 2004 17:30:49.641727958
...................................................................
User specified timeout on IO operation expired

After having looked around on the web for an explanation of the Winsock
Error 10055, it seems that this may be caused by an application that
"doesn't return system resources (such as memory) correctly."

I guess I have three questions.  Firstly, am I opening and closing the
channel correctly in the above application, or is there some sort of
additional call I need to make in order to close the channel completely?
Secondly, is there something else I'm doing wrong or some incorrect
assumption I'm making about the operation of EPICS on the Windows
environment?  Thirdly, is this a bug in EPICS or Windows?

Cheers,

Steve Banks
Australian Synchrotron Project
Department of Infrastructure
Level 18, 80 Collins Street
Melbourne   VIC   3000
tel:  +613 9655 6303
fax:  +613 9655 8666
web: www.synchrotron.vic.gov.au



Replies:
RE: WINSOCK Error 10055 Jeff Hill

Navigate by Date:
Prev: Re: Running epics in background in linux Eric Williams
Next: RE: WINSOCK Error 10055 Jeff Hill
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: Definitions of RELEASE_ variables Ralph Lange
Next: RE: WINSOCK Error 10055 Jeff Hill
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 10 Aug 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·