#define _POSIX_C_SOURCE 200809L #include /* assert */ #include /* memcmp */ /* Řada internetových protokolů začíná uvítací zprávou serveru. * Vaším úkolem bude naprogramovat proceduru ‹banner›, která se * připojí k zadanému hostiteli na zadaný TCP port, tuto zprávu * získá a zapíše ji do předané paměti. Uvítací zpráva je vždy * ukončena znakem konce řádku (pozor, pokus o další čtení poté, co * byl přečten konec řádku, povede k uváznutí). * * Podaří-li se zprávu načíst, procedura ‹banner› vrátí nulu, * v případě chyby pak -1. */ int banner( const char *hostname, int port, char *buffer, int len ); /* ┄┄┄┄┄┄┄ %< ┄┄┄┄┄┄┄┄┄┄ následují testy ┄┄┄┄┄┄┄┄┄┄ %< ┄┄┄┄┄┄┄ */ int main( void ) { char buf[ 512 ] = { 0 }; assert( banner( "relay.ip4.fi.muni.cz", 25, buf, 512 ) == 0 ); assert( memcmp( buf, "220 anxur.fi.muni.cz ESMTP " "NO UCE NO SPAM - CVT Vas lubi.\r\n", 60 ) == 0 ); assert( banner( "aisa.ip6.fi.muni.cz", 143, buf, 512 ) == 0 ); assert( memcmp( buf, "* OK [CAP", 9 ) == 0 ); assert( banner( "localhost", 79, buf, 512 ) == -1 ); return 0; }