A következo program lefoglal egy TCP portot, kiírja annak a címét a képernyore, és végtelen ciklusban vár a TCP-porton egy kapcsolatra, és kiszolgálja a rákapcsolódott klienst (a szolgálat annyi, hogy a kliens által elküldött byteokat a szabványos kimenetre kiírja). Ha egy megadott idon belül nem érkezik egy klienstol sem rákapcsolódási igény, akkor megfelelo hibaüzenetet ír ki, és elorol kezdi az egészet.
/* * Ez egy egyszeru szerver, amely var egy kliens rakapcsoladasara, de * egy timeout erteket is definial, es ha azon az idon belul nem * kapcsolodik ra egy kliens sem, akkor azt eszreveszi es fut tovabb. */ #include <sys/types.h> #include <sys/socket.h> #include <sys/time.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #define TRUE 1 main() { int sock, length; struct sockaddr_in server; /* Internet domain-beli cim */ int msgsock; /* Erre a socket-descriptorra accept-alja a kapcsolatot */ char buf[1024]; int retval; fd_set ready; struct timeval to; /* timeout erteke */ sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("hiba a socket-nel"); exit(1); } server.sin_family = AF_INET; server.sin_addr.s_addr = htonl(INADDR_ANY); server.sin_port = htons(0); if (bind(sock, &server, sizeof(server))) { perror("hiba a bind-nal"); exit(1); } length = sizeof(server); if (getsockname(sock, &server, &length)) { perror("hiba a getsockname-nel"); exit(1); } fprintf(stderr,"TCP port:%d\n", ntohs(server.sin_port)); /* Kliensekre var */ listen(sock, 5); while(1) { FD_ZERO(&ready); /* \"ures halmazt hoz l\'etre */ FD_SET(sock, &ready); /*sock socketot figyelni kell */ to.tv_sec = 5; /* Timeout */ to.tv_usec=0; /* Microsec. */ if (select(sock + 1, &ready, NULL, NULL, &to) < 0) { perror("hiba a select-nel"); continue; } if (FD_ISSET(sock, &ready)) { /* Be van allitva? */ msgsock=accept(sock,(struct sockaddr *)0, (int *)0); if (msgsock == -1) perror("hiba az accept-nel"); else do { bzero(buf, sizeof(buf)); if ((retval=read(msgsock,buf,1024))<0) perror("hiba a read-nel"); else if (retval == 0) fprintf(stderr,"End...\n"); else fprintf(stderr,"%s\n", buf); } while (retval > 0); close(msgsock); } else fprintf(stderr,"Nincs kapcsolat ... \n"); }; close(sock); /* Idaig nem sullyedhetunk */ }