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).
/*
* Pelda arra, hogy hogyan mukodik egy (iterativ) szerver.
* A program vegtelen ciklusban figyel egy adott TCP portot, beolvassa
* es a kepernyore irja az onnan jovo byteokat, majd uj kapcsolatra
* var.
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#define TRUE 1
main()
{
int sock, length;
struct sockaddr_in server;
int msgsock;
char buf[1024];
int retval;
int i;
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 = htons(INADDR_ANY);
server.sin_port = htons(0);
if (bind(sock, &server, sizeof(server))) {
perror("hiba a bind-nel");
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));
listen(sock, 5);
while(1) {
msgsock = accept(sock, 0, 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");
i = 0;
if (retval == 0)
fprintf(stderr,"Kapcsolat lezarva\n");
else
fprintf(stderr,"String:%s\n", buf);
} while (retval != 0);
close(msgsock);
};
close(sock); /* Sosem sullyedunk idaig */
}