Main Page | Features | Central Services | csv-Files | Types | Transfer | Access | API-C | API-VB/ActiveX | API-Java | Examples | Downloads
Trouble Shooting

Introduction

If you have followed all the examples to create a TINE client or server then your server or client stands a good chance of working right off the bat. However, if you are experiencing difficulties getting your programs to run correctly nothing is more frustrating than having no idea what to look for to solve the problem. Below are some tips as to what to look for in solving problems you might have. It is assumed that you have successfully linked and compiled your server or client. If you have problems compiling or linking, then you should double check your project.def file and your .mak file to make sure it is for your target platform.

Server Problems

I started my server and it looks happy, but I can’t see it on the net!

1). Check the connectivity.

2). Check your server environment

3). Is the server running?

4). Is the client up to date?

My 16-bit Windows Server has a General Protection Fault!

1) Check the obvious

2) Check your windows environment

My Server says “Bind: Address already in Use” and then stops!

1) If you are running DOS or 16-bit Windows:

2) If you are running VxWorks:

3) If you are running UNIX, VMS, or 32-bit Windows:

My Win32 Server seems to send corrupt data every now and then!

1) Is the array you are passing to the EqpSendData() method okay? This array is of course the source of data you are transferring, so make sure the problem is not here.

2) Make sure you only call the method EqpSetCompletion() (or set the EqpStatus property) once while inside the EqpFcn() event. This is very important as ActiveX events do not support return codes. Calling the EqpSetCompletion() method is thus a signal that the event has been processed, at least as regards data retrieval and transmission. Note that some containers, such as LabView cache the incoming event and return immediately. Also, if you make use of DoEvents() inside the event in Visual Basic, you also return control to the underlying server DLL and Srv.ocx. The point to remember is that the ActiveX control (Srv.ocx) maintains an event queue and only knows where to move the queue head and tail according to the firing of the event and the call to EqpSetCompletion(). The EqpStatus property is deprecated and is only there for backward compatibility when converting Visual Basic 3.0 applications to Visual Basic 6.0 applications. Nonetheless, if EqpStatus is used, it serves the same purpose as the EqpSetCompletion() method call. Namely, it advances the tail pointer in the event queue, so only one of either EqpSetCompletion() or EqpStatus should be used. Using both of these, or otherwise calling EqpSetCompletion() more than once within an event is the most common cause for ‘corrupt’ data being sent.

3) Make sure that EqpSetCompletion() is called after the EqpSendData() method (or EqpSendDataEx()) has been called. As Visual Basic does not cache events, you could call EqpSetCompletion() first in VB as long as there is no DoEvents between the call and EqpSendData(). However it is better to avoid doing this.

I can’t seem to transfer any more than 64 Kbytes of data. I thought it was possible to send more.

1) You will need to set the value of MaxRPCTransportSize to the corresponding value of the largest request you want to support. This variable has a default value of 64 Kbytes for most platforms (32 Kbytes for DOS). As calls are double buffered to the extent that one primary working area is allocated once upon startup (and is used as a dynamic repository for outgoing control data) while a data link will itself cause a reference repository to be allocated, you have control over how large a call can be (within the constraints of the available memory). So if you want to support a call for 1 Mbyte of data you should set MaxRPCTransportSize to 1000000 prior to system initialization. Note that this will have to come out of main memory! A DOS server will of course not trivially be able to support such large calls. On the other hand, if you know that no call will ever exceed say 4 Kbytes for instance, you can also set MaxRPCTransportSize to 4000 and save on the available heap, which is something that is sometimes necessary for DOS servers due to the 640 Kbyte limit.

I can’t seem to transfer data any faster than at 1 Hz. I thought it was possible to send data at a faster rate.

1) You will need to set the value of MinPollingRate to the minimal value in milliseconds which want to allow. This variable has a default value of 1000 milliseconds on some platforms and serves to protect servers from inadvertent fast data access which would serve no purpose but to make the server busy. There are however frequently cases where a fast data access is desirable, and you should set this value accordingly. The absolute minimum value is 20 milliseconds (50 Hz). An attempt to set this to a value smaller than 20 will ultimately be overridden.


Generated for TINE API by  doxygen 1.5.8