Unix Socket
-
Acia6850
- Beiträge: 53
- Registriert: Mo 9. Okt 2023, 18:45
- OS, Lazarus, FPC: Windows + WSL / Linux Debian Rasbian OS (L 3.0.0 FPC 3.3.2)
- CPU-Target: 64Bit
- Wohnort: LK Ludwigsburg
Unix Socket
Hallo hat schon jemand was in Lazarus mit Unix Sockets gemacht AF-Unix mit einem Unix Pfad ?
In Python sieht es so aus :
SOCKET_PATH = "/var/run/arduino-router.sock"
with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:
client.connect(SOCKET_PATH)
In Python sieht es so aus :
SOCKET_PATH = "/var/run/arduino-router.sock"
with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:
client.connect(SOCKET_PATH)
-
Mathias
- Beiträge: 7178
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Unix Socket
Mit g_socket habe ich mal etwas probiert:
Ausgabe:
Vielleicht hilf dir dies weiter.
Code: Alles auswählen
program project1;
uses
fp_glib2;
procedure main;
const
host = 'example.com';
req: pchar = 'GET / HTTP/1.0'#13#10'Host: example.com'#13#10#13#10;
port = 443;
BUF_SIZE = 64;
var
client: PGSocketClient;
connection: PGSocketConnection;
err: PGError = nil;
ostream: PGOutputStream;
istream: PGInputStream;
n: Tgssize;
buf: array[0..BUF_SIZE - 1] of char;
begin
client := g_socket_client_new;
g_socket_client_set_tls(client, gTrue);
connection := g_socket_client_connect_to_host(client, host, port, nil, @err);
if connection = nil then begin
g_printerr('Verbindung fehlgeschlagen: %s'#10, err^.message);
g_error_free(err);
g_object_unref(client);
Exit;
end;
ostream := g_io_stream_get_output_stream(G_IO_STREAM(connection));
g_output_stream_write(ostream, req, strlen(req), nil, @err);
istream := g_io_stream_get_input_stream(G_IO_STREAM(connection));
repeat
n := g_input_stream_read(istream, @buf, BUF_SIZE - 1, nil, @err);
if n > 0 then begin
buf[n] := #0;
g_print('%s', @buf[0]);
end else if err <> nil then begin
g_printerr('Fehler beim Lesen: %s', err^.message);
g_error_free(err);
err := nil;
end;
until n <= 0;
g_object_unref(connection);
g_object_unref(client);
end;
begin
main;
end.Code: Alles auswählen
TTP/1.1 200 OK
Date: Tue, 03 Feb 2026 18:29:37 GMT
Content-Type: text/html
Connection: close
CF-RAY: 9c83feae0fc8931a-ZRH
last-modified: Fri, 30 Jan 2026 05:47:18 GMT
allow: GET, HEAD
Accept-Ranges: bytes
Age: 11533
cf-cache-status: HIT
Server: cloudflare
<!doctype html><html lang="en"><head><title>Example Domain</title><meta name="viewport" content="width=device-width, initial-scale=1"><style>body{background:#eee;width:60vw;margin:15vh auto;font-family:system-ui,sans-serif}h1{font-size:1.5em}div{opacity:0.8}a:link,a:visited{color:#348}</style><body><div><h1>Example Domain</h1><p>This domain is for use in documentation examples without needing permission. Avoid use in operations.<p><a href="https://iana.org/domains/example">Learn more</a></div></body></html>Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
Warf
- Beiträge: 2252
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Unix Socket
Du kannst entweder die Berkley Sockets API direkt verwenden (Unit Sockets), bzw. auf Main/Trunk die entsprechenden high-level wrapper funktionen (Unit fpSockets), oder die Socket Stream Klasse TUnixSocket (unit ssockets) verwenden. Je nachdem was dir mehr gelegen ist
Re: Unix Socket
Typo: fpSockets = fpSock
-
Acia6850
- Beiträge: 53
- Registriert: Mo 9. Okt 2023, 18:45
- OS, Lazarus, FPC: Windows + WSL / Linux Debian Rasbian OS (L 3.0.0 FPC 3.3.2)
- CPU-Target: 64Bit
- Wohnort: LK Ludwigsburg
Unix Socket (gelöst)
Hallo, Vielen Dank für die Infos.
Mit den units Sockets, BaseUnix habe ich eine Lösung gefunden.
Mit den units Sockets, BaseUnix habe ich eine Lösung gefunden.
-
Warf
- Beiträge: 2252
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Unix Socket
Nein, das sind unterschiedliche units, fpsock ist eine halb fertige OOP implementation aus 2003 die eigentlich in jeder Hinsicht durch die unit ssockets abgelöst ist.
Fpsocket ist eine neue unit die ich aus meinem alten Projekt PasSimpleSockets die ich irgendwann zur fcl net contributed hab. Die ist ein proceduraler wrapper der Berkeley Socket API mit high level pascal Typen wie Strings, arrays und co damit man nicht so viel mit raw pointern rumhantieren muss.
Insbesondere kann fpsocket transparentes ipv6 und dual stack. Es wird zwar intern mittlerweile von den anderen fcl-net Klassen verwendet (um damit z.b. ipv6 support fur fpweb zu ermöglichen), das gesagt werden immer mal wieder noch bugs gefunden und es ist bisher nur in trunk/main
Das der name verwirrend ist ist mir leider zu spät aufgefallen, da fpsock im Grunde nicht wirklich benutzbar ist hatte ich es nicht auf dem schirm
Re: Unix Socket
Ja, sorry. Ich hatte überlesen, dass es erst im main/trunk ist.Warf hat geschrieben: Do 5. Feb 2026, 00:38 Das der name verwirrend ist ist mir leider zu spät aufgefallen, da fpsock im Grunde nicht wirklich benutzbar ist hatte ich es nicht auf dem schirm
Nachdem ich auf meinem 3.2.2 nur fpSock und keine fpSockets gefunden hatte und es mindestens thematisch in den gleichen Bereich fällt, dachte ich an einen Tippfehler.
Ein bisschen verwirrend ist es schon.
Nichts für ungut.