Programmet mitt segfaulter, hva gjør jeg?
- Sørg for at du kompilerer med flagget
-g
tilgcc
, hvis du ikke gjør dette så vil ikke debuggingsinformasjon bli lagt ved. - Kjør programmet ditt med
gdb
. Hvis du vanligvis ville kjørt./main 1234 1
, så gjør dette:gdb ./main
, og når gdb har startet opp skriver durun 1234 1
- Når programmet ditt da segfaulter, skriv
bt full
, da vil du se alle funksjonskallene (og argumentene til disse) som ledet opp til kræsjet, hvis du kun får opp spørsmålstegn så har du ødelagt stakken, da har du mest sannsynlig skrevet for mye til en variabel av typenchar a[100];
. - Fiks feilen.
Hva er portene som gis til l4_send?
Det er de virtuelle portene som lag 4 bruker, slik at du i teorien skal kunne ha flere lag 5-programmer.
Du skal ikke bruke portene du angir på kommandolinjen når du starter programmet, da portene på lag 4 i vår implementasjon må være under 1024.
De virtuelle portene på lag 4 blir aldri sjekket, du kan derfor trygt angi 0 som begge portene til l4_send.
Hvordan bør jeg skrive ut debuginformasjon?
Når du kompilerer koden med make debug
vil gcc bli kjørt med opsjonen -DDEBUG
, dette kan du bruke til å kun printe debugoutput hvis programmet blir kompilert med make debug
. Her er et eksempel på en makro DPRINT()
som fungerer som printf
, som også vil skrive ut filnavn og linjenummer, men ikke skrive ut noe hvis du kompilerer uten -DDEBUG
.
#ifdef DEBUG
#define DPRINT(args...) fprintf(stderr,"%10s:%-3d - ", __FILE__, __LINE__); fprintf(stderr, args);
#else
#define DPRINT(args...)
#endif
Node-til-node ACKing og sekvensnumre
En av utfordringene med ACKene er at de skal skje mellom hver node. For å unngå at man leverer samme pakke to ganger skal man bruke det originale sekvensnummeret til en pakke. Det vil si: for å kunne fjerne en pakke fra en kø trenger du både source og sekvensnummer. Når det gjelder sekvensnumrene selv så finnes det to løsninger som begge gir full uttelling: du kan bruke et 32-bits felt med evig økende sekvensnumre eller du kan bruke et mindre felt (1 byte for eksempel) med sekvensnumre som wrapper rundt.