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
<2004>
2005
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
<2004>
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|