![]() |
Linux
Application Development |
Michael K. Johnson Erik W. Troan |
/* tserver.c - simple server for TCP/IP sockets */
/* Waits for a connection on port 1234. Once a connection has been
established, copy data from the socket to stdout until the other
end closes the connection, and then wait for another connection to
the socket. */
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#include "sockutil.h" /* some utility functions */
int main(void) {
struct sockaddr_in address;
int sock, conn, i;
size_t addrLength = sizeof(struct sockaddr_in);
if ((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0)
die("socket");
/* Let the kernel reuse the socket address. This lets us run
twice in a row, without waiting for the (ip, port) tuple
to time out. */
i = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
address.sin_family = AF_INET;
address.sin_port = htons(1234);
memset(&address.sin_addr, 0, sizeof(address.sin_addr));
if (bind(sock, (struct sockaddr *) &address, sizeof(address)))
die("bind");
if (listen(sock, 5))
die("listen");
while ((conn = accept(sock, (struct sockaddr *) &address,
&addrLength)) >= 0) {
printf("---- getting data\n");
copyData(conn, 1);
printf("---- done\n");
close(conn);
}
if (conn < 0)
die("accept");
close(sock);
return 0;
}