TCP stack and GPRS suspension on Class B module


Good day,

I would like to know if anybody knows what happens in the following scenario.

  1. You do a GPRS activation.
  2. You open a TCP socket to a remote server.
  3. You initiate a voice call from within openat.
    According to my understaning the GPRS session will get suspended while you are on the voice call.
  4. The voice call ends.

a) Assuming the remote server do not close the socket will the socket still be open?
b) What happens to tcp packets sended from your peer while your GPRS session is suspended?
c) Do you get a callback from the tcp stack (or anywhere else) telling you your GPRS session is suspended/unsuspended?
d) Do you get an event if you loose your GPRS attachement while you are GPRS suspended?

Anybody any clues?


Hi truhann,
I am answering your questions based on my experiences.

The activation status of the socket will depend upon the duration of the voice call. In case, the voice call is too long, the TCP socket will time out and the TCP/IP library will clear the socket context.

When the module is having a GSM communication (GSM voice/data call), the TCP segments will not be received. However, as TCP provides a reliable communication, the TCP server (assuming it has not closed the socket) will sent the TCP segments again on timeout of receveiving the acknowledgement of previous segments.

I don’t think you will get an event which will indicate that your GPRS session is suspended.

If you have subscribed for GPRS services also (using adl_gprsSubscribe () API), you will receive events indicating that your GPRS attachment is lost in case the signal strength is very low or you yourself detach from GPRS. Please note that during GSM voice/data call, you are still attached to GPRS. The difference is that you are not sending/receiving GPRS packets.
Your TCP control callback function will report ED_ERR_GPRS_SESSION_LOST only when the PDP context (for GPRS) on which the communication was being done is deactivated.

Best Regards.