OSCAT Forum

network.lib => BECKHOFF => Thema gestartet von: FriedrichMiller am 11. November 2020, 11:46:20

Titel: IP-Control DNS-Lookup melden Fehler 1797
Beitrag von: FriedrichMiller 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.
Titel: Re: IP-Control DNS-Lookup melden Fehler 1797
Beitrag von: FriedrichMiller 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!