Frequently Asked Question

Bei fragmentierten RFC-1006-Paketen wird nur das letzte Paket empfangen
Last Updated 7 years ago

Fehlerbild
  • beim Empfang fragmentierter Pakete wird nur das letzte Fragment empfangen
Wann tritt das?
  • Sie verwenden eine Treiber Version
  • Sie verwenden Rfc1006Rx mit einem zu kleinen Timeout. Somit es es nicht möglich, die Folgetelegramme in dieser Zeitspanne zu empfangen.
  • die Rfc1006Rx kehrt bereits beim ersten Fragment, welches nicht empfangen werden kann, zurück und liefert den Fehler -1. Beim nächsten Aufruf von Rfc1006Rx wird das nächste jetzt im Puffer befindliche Fragment empfangen. Ist dieses das letzte, so liefert Rfc1006Rx die Länge dieses Fragmentes zurück (das ist der Fehler)
Was hat sich geändert?
  1. der Timeout gilt für den Empfang eines Fragmentes, d.h. für jedes Folgefragment wird die Uhr neu "aufgezogen" (das war auch bei den Vorgängerversionen so)
  2. kommt es beim Empfang eines Fragmentes bzw. des gesamten Paketes zum Zeitüberlauf, wird der Fehler -1 zurückgeliefert und die Verbindung geschlossen (das ist neu)
Tipp
Wir empfehlen folgende Vorgehensweise:
Vor Aufruf von Rfc1006Rx, prüfen, ob ein Paket in der Queue ist, dann mit Timeout mittels Rfx1006Rx das Paket empfangen
if (Rfc1006PacketInQ (m_Ref))
{
Rfc1006Rx (m_Ref, m_RxData), sizeof (m_RxData) - 1, RxTimeout);
}
Liefert Rfc1006PacketInQ False zurück, so ist entweder kein Paket im Puffer oder es besteht keine Verbindung. Besteht keine Verbindung, so führt Rfc1006PacketInQ keinen Connect aus! Im Servermodus wird diese Verbindung vom Client automatisch aufgebaut.
Im Clientmodus sollten Sie so vorgehen, um die Verbindung aufzubauen:
if (Rfc1006PacketInQ (m_Ref))
{
Rfc1006Rx (m_Ref, m_RxData), sizeof (m_RxData) - 1, RxTimeout);
}
else if (Rfc1006GetStatus (m_Ref) == 0)
{
Rfc1006Connect (m_Ref);
}

Please Wait!

Please wait... it will take a second!