getaddrinfo()
=============

1. Maak een programma dat:
   - Een IP-adres op de commandolijn meekrijgt (ipv4 of ipv6, dat maak
     je zelf uit),
   - Dat adres converteert naar de netwerk-representatie (inet_pton)
   - De netwerk-representatie terug converteert naar de
     tekstrepresentatie (inet_ntop)
   - Het teruggeconverteerde adres terug uitvoert

2. Declareer een short en een int. Vraag de gebruiker om waarden voor
   deze twee getallen. Converteer ze naar network byte order (htons en
   htonl), en voer de geconverteerde waarde uit: één keer in decimaal,
   en één keer in hexadecimaal (%x).

3. Als je een ip-adres in binaire representatie hebt, moet je dat dan
   nog converteren naar network byte order? Schrijf een programma dat
   dat uitzoekt: vraag een ip-adres van de gebruiker, converteer naar
   netwerk-representatie, en doe een uitvoer van de sin_addr.s_addr in
   struct sockaddr_in, in hexadecimaal.

socket, bind, listen, accept()
==============================
1. Maak een programma dat:
   - Een poort opent (kies zelf maar de welke) (socket, bind)
   - Luistert naar binnenkomende connecties, en die accepteert
     (listen, accept)
   - Met behulp van write() (zie slides deze ochtend) het bericht
     "Hallo daar!" naar de communicatiepartner stuurt
   - Het socket terug afsluit (close)

   Test met 'telnet localhost <poortnummer>'

sudo apt-get install telnet

fork()
======

Pas het programma uit de vorige oefening aan zodat:
- We in een loop draaien (zodat we meer dan één connectie kunnen afhandelen)
- Na een succesvolle accept() we een fork() doen
- De child (return value van fork() is 0) sluit de listening socket
- De parent (return value van fork() is niet 0) sluit de nieuwe socket
  (return value van accept)
- De child wacht op een bericht van de client (gebruik 'read', zie
  deze ochtend), stuurt 'OK' terug, en wordt dan afgesloten. Gebruik
  de functie exit, of 'return' als je in de functie main blijft, om de
  applicatie af te sluiten; of gebruik een conditie in de loop die
  alleen waar is als je child bent (heel veel mogelijkheden ...)
- De server wacht op de volgende accept() (i.e., we gaan terug in onze loop)