Skip to content

UDP error 22: Invalid argument when sending message.

  • Lazarus/FPC Version: Lazarus 2.2.4 (rev Unknown) FPC 3.2.2 x86_64-freebsd-gtk2
  • Operating System: FreeBSD 13.1
  • CPU / Bitness: 64 Bit
  • Installed using: pkg install lazarus-gtk2 fpc fpc-sources, fpc-units, fpc-docs fpc-utils

Components installed: lNET,

What happens

When sending a message over UDP, an error is received: Send error[22]: Invalid argument.

What did you expect

Expected no error. The same code works when using Lazarus 2.2.2.

Steps to reproduce

1: Open python and create a UPD socket server execute the following

import socket
scksrv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
scksrv.bind(('127.0.0.1', 23223))
scksrv.recvfrom(100)

2: Create in lazarus form. Drop the lNet UDPComponent on it. Craete a button, with an OnClick event. Create also an Error event on the UDPComponent.

procedure TForm1.Button1Click(Sender: TObject);
begin
  LUDPComponent1.Host := '127.0.0.1';
  LUDPComponent1.Port := 23223;
  if LUDPComponent1.Connect(LUDPComponent1.Host, LUDPComponent1.Port) then
    LUDPComponent1.SendMessage('Hello', Format('%s:%d', [LUDPComponent1.Host, LUDPComponent1.Port]))
  else
    ShowMessage('Connection failed');
end;

procedure TForm1.LUDPComponent1Error(const msg: string; aSocket: TLSocket);
begin
  ShowMessage(msg);
end;

3: Compile: Note that the following two messages are displayed in the message window:

Error: /usr/local/bin/ld.bfd: warning: /usr/local/lib/fpc/3.2.2/units/x86_64-freebsd/rtl/cprt0.o: missing .note.GNU-stack section implies executable stack Error: /usr/local/bin/ld.bfd: NOTE: This behaviour is deprecated and will be removed in a future version of the linker

4: When the form is visible, click the button -> Error message: Send error [22]: Invalid argument.

Further info

An a different VM also FreeBSD 13.1, having the same version of FPC 3.2.2_3 but Lazarus 2.2.2 the same code does work. The difference is in the output during the compile cycle. The messages in 3: are absent (on Lazarus 2.2.2). There is a difference between into /usr/local/lib/fpc/3.2.2/units/x86_64-freebsd/rtl/cprt0.0 on 2.2.2 and 2.2.4 - file size is the same, content is partly different.

Edited by Ignace Peeters
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information