Autor Thema: IP-Control DNS-Lookup melden Fehler 1797  (Gelesen 4435 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline FriedrichMiller

  • Newbie
  • *
  • Beiträge: 6
    • Profil anzeigen
IP-Control DNS-Lookup melden Fehler 1797
« am: 11. November 2020, 11:46:20 »
Hallo zusammen,

habe derzeit ein Problem beim DNS-Lookup.
Domain DNS-Server ect. alles per Windows erreichbar. (ping www.domain.de bekomme ich eine Antwort).

Habe schon den DNS-Client und IP-Control auf Version 1.35 geupdatet, genau so den Beckhoff TCP/IP Server auf  3.1.6.

Sobald ich eine DNS-Abfrage starte dauert es ein bisschen und der fbReceiveFrom Baustein meldet Fehler 1797: Parametergröße nicht korrekt.

Bestehen derzeit Probleme oder ist was bekannt?

Vielen Dank.

Offline FriedrichMiller

  • Newbie
  • *
  • Beiträge: 6
    • Profil anzeigen
Re: IP-Control DNS-Lookup melden Fehler 1797
« Antwort #1 am: 11. November 2020, 13:13:44 »
Hallo,

habe das Problem gefunden!
Bei der DNS-abfrage ist die UDP-antwort 512 Bytes groß!

Alter Code im IP-CONTROL zeile 247bis 260
r_offset := SEL(udp_mode,UINT_TO_INT(R_BUF.SIZE),0);
r_count := r_max_size - r_offset;
bytes_received := 0;

IF udp_mode THEN
fbReceiveFrom(bExecute := FALSE );
fbReceiveFrom(bExecute:= TRUE, sSrvNetId := sSrvNetId, hSocket:= socket, cbLen := r_count, pDest:= ADR(R_BUF.BUFFER), tTimeout:= TIME_OUT);
fbReceiveFrom.bExecute := FALSE; (* Vorbelegung *)
ELSE
fbReceive(bExecute:= FALSE);
fbReceive(bExecute:= TRUE, sSrvNetId := sSrvNetId , hSocket:= socket , cbLen:= r_count, pDest:= ADR(R_BUF.BUFFER[r_offset]) , tTimeout:= TIME_OUT);
fbReceive.bExecute:= FALSE;
END_IF;

Workaround:
r_offset := SEL(udp_mode,UINT_TO_INT(R_BUF.SIZE),0);
r_count := r_max_size - r_offset;
bytes_received := 0;

IF udp_mode THEN
IF IP_C.C_PORT = 53 THEN
r_count := 512;
END_IF;
fbReceiveFrom(bExecute := FALSE );
fbReceiveFrom(bExecute:= TRUE, sSrvNetId := sSrvNetId, hSocket:= socket, cbLen := r_count, pDest:= ADR(R_BUF.BUFFER), tTimeout:= TIME_OUT);
fbReceiveFrom.bExecute := FALSE; (* Vorbelegung *)
ELSE
fbReceive(bExecute:= FALSE);
fbReceive(bExecute:= TRUE, sSrvNetId := sSrvNetId , hSocket:= socket , cbLen:= r_count, pDest:= ADR(R_BUF.BUFFER[r_offset]) , tTimeout:= TIME_OUT);
fbReceive.bExecute:= FALSE;
END_IF;


Viel Erfolg!