#include <stdio.h>
#include <signal.h>
#include "tcp_lib.h"
void do_tcpsv(int port);
int main(int argc,char* argv[])
{
int pid,port = 7;
printf("\n<q Enter>: end of program\n\n");
if((pid = fork()) < 0){
perror("fork"); exit(1);
}
if(pid == 0){
do_tcpsv(port); exit(0);
} else {
while(getchar()!='q') ;
kill(pid,SIGINT);
}
printf("end of TCP server.\n");
return 0;
}
void do_tcpsv(int port)
{
int acc,sock,sbyte;
char clhost[256];
BYTE recvcom[BUFSIZ];
struct sigaction sa;
void myendsv(int no) {
if(sock > 0) TCP_close(sock);
exit(0);
}
memset(&sa,0,sizeof(struct sigaction));
sa.sa_handler = myendsv;
if(sigaction(SIGINT,&sa,NULL) != 0){
perror("sigaction");
return;
}
if((acc = TCP_acc_port(port)) < 0)
return;
Disp_ipinfo("echo server",port);
sock = -1;
while(1){
sock = TCP_accept(acc,clhost);
if(sock < 0){
perror("accept"); continue;
}
printf("**new client: [%s]\n",clhost);
while((sbyte = TCP_recv(sock,recvcom,0)) > 0){
printf("recbuf = %s[%d byte]\n",(char*)recvcom,sbyte);
TCP_send(sock,recvcom,sbyte);
}
printf("**client disconnected.\n");
TCP_close(sock);
sock = -1;
}
return;
}