55 lines
1.3 KiB
C
Executable File
55 lines
1.3 KiB
C
Executable File
/* Source: Peterson & Davie (2007), Computer Networks, a Systems Approach,
|
|
* 4th ed., Morgan Kaufmann, p. 35-36.
|
|
* Included stdlib.h, string.h, and strings.h so it compiles on Linux.
|
|
* Changed port from 5432 (postgresql) to 7701 (unassigned).
|
|
* - JLND Feb 7 2009
|
|
*/
|
|
#include<unistd.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <strings.h>
|
|
#include <stdio.h>
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <netdb.h>
|
|
#define SERVER_PORT 7701
|
|
#define MAX_PENDING 5
|
|
#define MAX_LINE 256
|
|
|
|
int
|
|
main()
|
|
{
|
|
struct sockaddr_in sin;
|
|
char buf[MAX_LINE];
|
|
int len;
|
|
int s, new_s;
|
|
|
|
/* build address data structure */
|
|
bzero((char *)&sin, sizeof(sin));
|
|
sin.sin_family = AF_INET;
|
|
sin.sin_addr.s_addr = INADDR_ANY;
|
|
sin.sin_port = htons(SERVER_PORT);
|
|
|
|
/* setup passive open */
|
|
if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
|
|
perror("simplex-talk: socket");
|
|
exit(1);
|
|
}
|
|
if ((bind(s, (struct sockaddr *)&sin, sizeof(sin))) < 0) {
|
|
perror("simplex-talk: bind");
|
|
exit(1);
|
|
}
|
|
listen(s, MAX_PENDING);
|
|
|
|
/* wait for connection, then receive and print text */
|
|
while(1) {
|
|
if ((new_s = accept(s, (struct sockaddr *)&sin, &len)) < 0) {
|
|
perror("simplex-talk: accept");
|
|
exit(1);
|
|
}
|
|
while (len = recv(new_s, buf, sizeof(buf), 0))
|
|
fputs(buf, stdout);
|
|
close(new_s);
|
|
}
|
|
} |