#include #include #include #include #include #include #include #include extern int errno; #define PORT_NUMBER 5500 int main( argc, argv ) int argc; char **argv; { struct sockaddr_in sin_x; int SizeSin_x; char Buf[128]; int sd, sn, n; int InitServer( ); unsigned char *Ipa; if( argc != 2 ){ printf("Uporaba: %s ImePostaje\n", argv[0]); exit( 1 ); } if( (sd = InitServer( argv[1] )) < 0){ perror("Napaka: "); exit( 1 ); } listen( sd, 5 ); alarm( 60 ); /* koncaj po eni minuti */ while( 1 ){ bzero((char *)&sin_x,sizeof(sin_x)); SizeSin_x = sizeof(sin_x); if( (sn = accept(sd, (struct sockaddr_in *)&sin_x, &SizeSin_x)) < 0){ perror("Napaka: "); exit( 2 ); } /* zveza je vzpostavljena, ustvari strezni proces */ if( fork() == 0 ){ Ipa = (unsigned char *)&sin_x.sin_addr; printf("Zveza z %u.%u.%u.%u je vzpostavljena\n", Ipa[0],Ipa[1],Ipa[2],Ipa[3]); while( (n = read( sn, Buf, sizeof( Buf ))) > 0 ){ Buf[n] = 0; printf( "%s\n", Buf ); } printf("Odjemalec je prekinil zvezo\n"); exit( 0 ); } } } int InitServer( host ) char *host; { struct sockaddr_in sin_x; struct hostent *hp_x; int sd; unsigned char *Nas; if( (hp_x=gethostbyname(host)) == NULL) return( -1 ); bzero((char *)&sin_x,sizeof(sin_x)); bcopy(hp_x->h_addr,(char *)&sin_x.sin_addr,hp_x->h_length); sin_x.sin_family = hp_x->h_addrtype; sin_x.sin_port = PORT_NUMBER; printf("Ime: %s, ", hp_x -> h_name); Nas = (unsigned char *)(hp_x -> h_addr); printf("Naslov: %u.%u.%u.%u\n", *Nas, *(Nas+1), *(Nas+2), *(Nas+3)); if( (sd = socket(AF_INET,SOCK_STREAM,0)) < 0 ) return( -2 ); if( bind(sd, (struct sockaddr_in *)&sin_x, sizeof( sin_x )) < 0) return( -3 ); return( sd ); }