std.net.socket
Umfassende Socket-Abstraktion für TCP, UDP, Unix Domain Sockets und Raw Sockets. Ermöglicht den Aufbau von Client- und Serveranwendungen auf Netzwerkebene – von einfachen Verbindungen bis hin zu nicht-blockierendem I/O mit Poll/Select-Multiplexing. Enthält außerdem Low-Level-Funktionen für ICMP-Ping, ARP-Paketgenerierung und Ethernet-Header-Erstellung.
Diese Unit bildet die Grundlage für alle höheren Netzwerkprotokolle in der Lyx-Standardbibliothek (HTTP, DNS, SMTP etc.).
import std.net.socket;
var listener: TCPListener := TCPListenerNew();
TCPListenerBind(listener, 8080);
TCPListenerListen(listener);
var conn: TCPConn := TCPListenerAccept(listener);
TCPConnWrite(conn, "Hello\n", 6);
TCPConnClose(conn);
Imports
std.net.typesstd.net.syscalls
Funktionen
| Signatur | Sichtbarkeit | Beschreibung |
|---|---|---|
BufferAlloc(size: int64): int64 | pub | Alloziert Speicherpuffer der Größe n |
BufferFree(buf: int64, size: int64): int64 | pub | Gibt Speicherpuffer frei |
Typen
TCPListener (struct)
| Feld | Typ |
|---|---|
fd | int64 |
| Signatur | Sichtbarkeit | Beschreibung |
|---|---|---|
TCPListenerNew(): TCPListener | pub | Erstellt neuen TCP-Listener-Socket |
TCPListenerSetReuseAddr(listener: TCPListener): int64 | pub | Aktiviert SO_REUSEADDR am Listener |
TCPListenerSetReusePort(listener: TCPListener): int64 | pub | Aktiviert SO_REUSEPORT am Listener |
TCPListenerSetBacklog(listener: TCPListener, backlog: int64): int64 | pub | Setzt maximale Warteschlangenlänge |
TCPListenerBind(listener: TCPListener, addr: int64): int64 | pub | Bindet Listener an Adressstruktur |
TCPListenerBindTo(listener: TCPListener, ip: int64, port: int64): int64 | pub | Bindet Listener an IP und Port |
TCPListenerListen(listener: TCPListener, backlog: int64): int64 | pub | Startet Verbindungsannahme |
TCPListenerAccept(listener: TCPListener): TCPConn | pub | Nimmt eingehende TCP-Verbindung an |
TCPListenerClose(listener: TCPListener) | pub | Schließt Listener-Socket |
TCPConn (struct)
| Feld | Typ |
|---|---|
fd | int64 |
| Signatur | Sichtbarkeit | Beschreibung |
|---|---|---|
TCPConnRead(conn: TCPConn, buf: int64, n: int64): int64 | pub | Liest Bytes aus TCP-Verbindung |
TCPConnWrite(conn: TCPConn, buf: int64, n: int64): int64 | pub | Schreibt Bytes in TCP-Verbindung |
TCPConnClose(conn: TCPConn) | pub | Schließt TCP-Verbindung |
TCPConnSetNodelay(conn: TCPConn, enable: bool): int64 | pub | Aktiviert oder deaktiviert TCP_NODELAY |
TCPConnSetKeepAlive(conn: TCPConn, enable: bool): int64 | pub | Aktiviert oder deaktiviert Keep-Alive |
TCPConnGetError(conn: TCPConn): int64 | pub | Liest Fehlercode der Verbindung |
TCPConnSetRecvBuf(conn: TCPConn, size: int64): int64 | pub | Setzt Empfangspuffergröße |
TCPConnSetSendBuf(conn: TCPConn, size: int64): int64 | pub | Setzt Sendepuffergröße |
TCPConnSetReuseAddr(conn: TCPConn, enable: bool): int64 | pub | Aktiviert SO_REUSEADDR an Verbindung |
TCPConnect(ip: int64, port: int64): TCPConn | pub | Stellt TCP-Verbindung zu IP:Port her |
TCPConnectAddr(ipAddr: IPAddr): TCPConn | pub | Stellt TCP-Verbindung via IPAddr her |
UDPSocket (struct)
| Feld | Typ |
|---|---|
fd | int64 |
| Signatur | Sichtbarkeit | Beschreibung |
|---|---|---|
UDPSocketNew(): UDPSocket | pub | Erstellt neuen UDP-Socket |
UDPSocketBind(sock: UDPSocket, addr: int64): int64 | pub | Bindet UDP-Socket an Adressstruktur |
UDPSocketBindTo(sock: UDPSocket, ip: int64, port: int64): int64 | pub | Bindet UDP-Socket an IP und Port |
UDPSocketSendTo(sock: UDPSocket, buf: int64, n: int64, dest: int64): int64 | pub | Sendet Datagramm an Zieladresse |
UDPSocketSendToAddr(sock: UDPSocket, buf: int64, n: int64, ip: int64, port: int64): int64 | pub | Sendet Datagramm an IP:Port |
UDPSocketRecvFrom(sock: UDPSocket, buf: int64, n: int64, src: int64, addrlen: int64): int64 | pub | Empfängt Datagramm mit Absenderadresse |
UDPSocketRecv(sock: UDPSocket, buf: int64, n: int64, senderIP: int64, senderPort: int64): int64 | pub | Empfängt Datagramm mit IP und Port |
UDPSocketClose(sock: UDPSocket) | pub | Schließt UDP-Socket |
UDPSocketSetReuseAddr(sock: UDPSocket): int64 | pub | Aktiviert SO_REUSEADDR am UDP-Socket |
UDPSocketSetRecvBuf(sock: UDPSocket, size: int64): int64 | pub | Setzt Empfangspuffergröße |
UDPSocketSetSendBuf(sock: UDPSocket, size: int64): int64 | pub | Setzt Sendepuffergröße |
UDPSocketGetError(sock: UDPSocket): int64 | pub | Liest Fehlercode des UDP-Sockets |
RawSocket (struct)
| Feld | Typ |
|---|---|
fd | int64 |
| Signatur | Sichtbarkeit | Beschreibung |
|---|---|---|
RawSocketNew(protocol: int64): RawSocket | pub | Erstellt Raw-Socket für Protokoll |
RawSocketSendTo(sock: RawSocket, buf: int64, n: int64, destAddr: int64): int64 | pub | Sendet Rohpaket an Zieladresse |
RawSocketRecvFrom(sock: RawSocket, buf: int64, n: int64, srcAddr: int64, addrlen: int64): int64 | pub | Empfängt Rohpaket mit Quelladresse |
RawSocketClose(sock: RawSocket) | pub | Schließt Raw-Socket |
ICMPHeader (struct)
| Feld | Typ |
|---|---|
icmp_type | uint8 |
icmp_code | uint8 |
icmp_cksum | uint16 |
icmp_id | uint16 |
icmp_seq | uint16 |
| Signatur | Sichtbarkeit | Beschreibung |
|---|---|---|
ICMPMakeEchoRequest(id: uint16, seq: uint16): ICMPHeader | pub | Erstellt ICMP-Echo-Request-Header |
ICMPChecksum(data: int64, len: int64): uint16 | pub | Berechnet ICMP-Prüfsumme |
ICMPPing(destIP: int64, id: uint16, seq: uint16, timeoutSecs: int64): int64 | pub | Sendet ICMP-Ping und wartet auf Antwort |
EthernetHeaderCreate(dstMac: MacAddr, srcMac: MacAddr, ethertype: int64): EthernetHeader | pub | Erstellt Ethernet-Frame-Header |
ARPMakeRequest(senderMac: MacAddr, senderIP: int64, targetIP: int64): ARPPacket | pub | Erstellt ARP-Request-Paket |
ARPMakeReply(senderMac: MacAddr, senderIP: int64, targetMac: MacAddr, targetIP: int64): ARPPacket | pub | Erstellt ARP-Reply-Paket |
ARPSerializePacket(eth: EthernetHeader, arp: ARPPacket, buf: int64): int64 | pub | Serialisiert ARP-Paket in Puffer |
MacBroadcast(): MacAddr | pub | Gibt Broadcast-MAC-Adresse zurück |
IPPack(a: uint8, b: uint8, c: uint8, d: uint8): int64 | pub | Packt vier Oktette zu IPv4-Adresse |
IPUnpack(ip: int64): IPAddr | pub | Entpackt IPv4-Adresse in Oktette |
Konstanten
| Name | Typ | Wert | Sichtbarkeit |
|---|---|---|---|
F_GETFL | int64 | 3 | priv |
F_SETFL | int64 | 4 | priv |
O_NONBLOCK | int64 | 2048 | priv |
EAGAIN | int64 | 11 | priv |
EINPROGRESS | int64 | 115 | priv |
EWOULDBLOCK | int64 | 11 | priv |
SocketSetNonBlocking(fd: int64): int64 | pub | Setzt Socket auf nicht-blockierenden Modus | |
SocketSetBlocking(fd: int64): int64 | pub | Setzt Socket auf blockierenden Modus | |
SocketIsNonBlocking(fd: int64): bool | pub | Prüft ob Socket nicht-blockierend ist |
PollFD (struct)
| Feld | Typ |
|---|---|
fd | int64 |
events | int16 |
revents | int16 |
POLLIN | int16 | 1 | priv |
POLLOUT | int16 | 4 | priv |
POLLERR | int16 | 8 | priv |
POLLHUP | int16 | 16 | priv |
POLLNVAL | int32 | 32 | priv |
Externe Funktionen
| Signatur | Beschreibung |
|---|---|
sys_poll(fds: int64, nfds: int64, timeout: int64): int64 | Wartet auf Ereignisse mehrerer Deskriptoren |
sys_select(nfds: int64, readfds: int64, writefds: int64, exceptfds: int64, timeout: int64): int64 | Multiplext I/O auf mehrere Deskriptoren |
| Signatur | Sichtbarkeit | Beschreibung |
|---|---|---|
SocketPoll(fds: int64, nfds: int64, timeout: int64): int64 | pub | Wartet auf Ereignisse via poll() |
PollFDReadable(fds: int64, index: int64): bool | pub | Prüft ob Deskriptor lesbar ist |
PollFDWritable(fds: int64, index: int64): bool | pub | Prüft ob Deskriptor schreibbar ist |
PollFDError(fds: int64, index: int64): bool | pub | Prüft ob Deskriptor Fehler hat |
FDSetZero(fdSet: int64) | pub | Leert fd_set-Struktur |
FDSet(fd: int64, fdSet: int64) | pub | Fügt Deskriptor zu fd_set hinzu |
FDClr(fd: int64, fdSet: int64) | pub | Entfernt Deskriptor aus fd_set |
FDIsSet(fd: int64, fdSet: int64): bool | pub | Prüft ob Deskriptor in fd_set gesetzt |
ConnectResult (struct)
| Feld | Typ |
|---|---|
success | bool |
| Signatur | Sichtbarkeit | Beschreibung | |
|---|---|---|---|
TCPConnectNonBlocking(ip: int64, port: int64, timeoutMs: int64): ConnectResult | pub | Verbindet nicht-blockierend mit Timeout | |
SocketCanRead(fd: int64, timeoutMs: int64): int64 | pub | Prüft Lesbarkeit innerhalb Timeout | |
SocketCanWrite(fd: int64, timeoutMs: int64): int64 | pub | Prüft Schreibbarkeit innerhalb Timeout | |
AF_UNIX | int64 | 1 | priv |
UnixConn (struct)
| Feld | Typ |
|---|---|
fd | int64 |
| Signatur | Sichtbarkeit | Beschreibung |
|---|---|---|
UnixSocketNew(): UnixConn | pub | Erstellt neuen Unix-Domain-Socket |
UnixSocketBind(sock: UnixConn, path: int64): int64 | pub | Bindet Unix-Socket an Dateipfad |
UnixSocketListen(sock: UnixConn, backlog: int64): int64 | pub | Startet Verbindungsannahme am Socket |
UnixSocketAccept(sock: UnixConn): UnixConn | pub | Nimmt Unix-Socket-Verbindung entgegen |
UnixSocketConnect(path: int64): UnixConn | pub | Verbindet mit Unix-Domain-Socket-Pfad |
UnixSocketRead(conn: UnixConn, buf: int64, n: int64): int64 | pub | Liest Bytes vom Unix-Socket |
UnixSocketWrite(conn: UnixConn, buf: int64, n: int64): int64 | pub | Schreibt Bytes auf Unix-Socket |
UnixSocketClose(conn: UnixConn) | pub | Schließt Unix-Socket |
UnixSocketGetPeerCred(conn: UnixConn, pid: int64, uid: int64, gid: int64): int64 | pub | Liest Peer-Prozessinformationen aus |
TCPConnectIPv6(ip6Hi: int64, ip6Lo: int64, port: int64): TCPConn | pub | Verbindet TCP über IPv6-Adresse |
TCPListenerBindIPv6(listener: TCPListener, ip6Hi: int64, ip6Lo: int64, port: int64): int64 | pub | Bindet Listener an IPv6-Adresse |
TCPListenerNewIPv6(): TCPListener | pub | Erstellt IPv6-TCP-Listener-Socket |
UDPSocketNewIPv6(): UDPSocket | pub | Erstellt IPv6-UDP-Socket |
UDPSocketSendToIPv6(sock: UDPSocket, buf: int64, n: int64, | pub | Sendet UDP-Datagramm via IPv6 |
UDPSocketBindIPv6(sock: UDPSocket, ip6Hi: int64, ip6Lo: int64, port: int64): int64 | pub | Bindet UDP-Socket an IPv6-Adresse |
