PET projekt si kladl velké nároky na implementaci síťových funkcí. Kladl se důraz především na správnost a pokud možno též i rychlost a proto skupina síťových funkcí prošla největším vývojem. Jejich konečnou podobu by měla popsat následující kapitola (pozn. Síťová vrstva PETu je obsažena v souboru net.c).
V síťových funkcích se používají síťová systémová volání. Téměř všechny systémová volání se chovají tak, že nevrátí řízení zpět dokud nepřečtou/nezapíšou/atp. předem daný počet bytů. Např. volání read(int sock,void *buf, int pocet) se vrátí až poté, co je na socket sock zapsáno pocet bytů z buferu buf nebo poté co nastane nějaká chyba např. zavření socketu. Není tedy možné například specifikovat timeout na zápis/čtení atp. Takové chování je pro PET nevyhovující a proto jsme se rozhodli použít řešení s tzv. non-block sockety. Pokud je totiž socket prohlášen za non-block (systémové volání fcntl()), žádná ze systémových volání neblokuje a vrátí řízení zpět ihned poté co není možné data zapsat/číst/atp. Volání se tedy vrátí i v případě, že se nepodařilo zapsat všechna data. Toto řešení je sice daleko náročnější na vlastní implementaci, zato ale přesně vyhovuje požadavkům PETu. U všech síťových funkcí je možné nastavit timeout na výše uvedená systémová volání. Tento timeout se nastavuje v konfiguračním souboru PETu.
Síťové funkce PETu fungují na tomto principu: