| UNIX-sockets bieden verschillende typen, elk ontworpen voor verschillende communicatiescenario's. Ze kunnen grofweg worden gecategoriseerd als:
* Stream-sockets (SOCK_STREAM): Deze bieden een betrouwbare, geordende en bidirectionele bytestroom. Gegevens worden in een continue stroom verzonden en de ontvanger ontvangt de bytes in de exacte volgorde waarin ze zijn verzonden. Zie het als een pijp:gegevens stromen naadloos. TCP is het meest voorkomende protocol dat wordt gebruikt met stream-sockets.
* Datagramsockets (SOCK_DGRAM): Deze bieden een verbindingsloze, onbetrouwbare en bidirectionele communicatiemethode. Gegevens worden verzonden in afzonderlijke pakketten (datagrammen), die in de verkeerde volgorde kunnen aankomen, kunnen worden gedupliceerd of geheel verloren kunnen gaan. Er is geen garantie op levering. UDP is het typische protocol dat wordt geassocieerd met datagramsockets.
* Raw-sockets (SOCK_RAW): Deze bieden een interface op zeer laag niveau, waardoor directe toegang tot de netwerkprotocollaag mogelijk is. U kunt onbewerkte netwerkpakketten maken en verzenden, waarbij u protocollen op een hoger niveau, zoals TCP/IP, omzeilt. Dit vereist een diepgaand inzicht in netwerken en wordt over het algemeen gebruikt voor gespecialiseerde taken zoals netwerkmonitoring en foutopsporing. Vereist de juiste rechten.
* Gesequenced pakketsockets (SOCK_SEQPACKET): Net als stream-sockets bieden deze een betrouwbare, geordende, bidirectionele bytestream. Elke verzending wordt echter verpakt in een afzonderlijk bericht met een eigen header, waardoor betere berichtgrenzen mogelijk zijn dan SOCK_STREAM. Ze komen minder vaak voor dan stream- of datagramsockets.
* Unix-domeinsockets (AF_UNIX of AF_LOCAL): Deze stopcontacten communiceren alleen binnen één enkele machine; er zijn geen netwerkprotocollen zoals TCP of UDP bij betrokken. Ze zijn sneller en veiliger dan netwerksockets, omdat ze de netwerkstack niet doorkruisen. Ze worden vaak gebruikt voor communicatie tussen processen (IPC) binnen een systeem.
Belangrijke verschillen:
* Verbindingsgericht versus verbindingsloos: SOCK_STREAM (TCP) is verbindingsgericht; er wordt een verbinding tot stand gebracht vóór de gegevensoverdracht. SOCK_DGRAM (UDP) is verbindingsloos; elk datagram is onafhankelijk.
* Betrouwbaar versus onbetrouwbaar: SOCK_STREAM is betrouwbaar; gegevens komen gegarandeerd in orde en zonder verlies aan (behoudens catastrofale netwerkstoringen). SOCK_DGRAM is onbetrouwbaar; er is geen garantie op levering of bestelling.
De keuze voor het type socket hangt volledig af van de vereisten van de toepassing. Als betrouwbare levering en bestelling voorop staan, gebruik dan `SOCK_STREAM`. Als snelheid prioriteit heeft en enig gegevensverlies acceptabel is, is `SOCK_DGRAM` een betere keuze. `AF_UNIX` is uitstekend geschikt voor efficiënte IPC. `SOCK_RAW` is voor zeer gespecialiseerde taken op laag niveau. `SOCK_SEQPACKET` is een niche-optie die zelden wordt gebruikt. |