====== 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.types'' * ''std.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 |