Need Help with Daemon Proxy Server

TLDR: Teacher wants me to build Daemon Proxy Server, don't know how. Help.

Hello,
I am having trouble with an assignment my teacher gave for an end of semester project. She gave us code to start with, but honestly I've no idea where to go with it. The assignment is as such:

Design of a Daemon Process Acting as a TCP Proxy Server
1. Project description
In this project, you are required to implement a daemon process that acts as a
general TCP proxy server. The daemon performs the following activities:
(a) The daemon listens for TCP connections on a specified port number.
(b) When a new client initiates a TCP connection request, the daemon accepts
the request and establishes a TCP connection with the new client.
© The daemon forks a child process that is dedicated to handling the new
client.
(d) The child process establishes a TCP connection to a pre-assigned port on the
actual targeted server.
(e) The child process falls into a loop in which it acts as an intermediator
exchanging data (reading/writing or writing/reading) between the client and
the targeted server.
(f) Once a child has been forked, the daemon process resumes listening for
additional TCP connections.

The server code that she gave us as an example/starter is:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/* server.c - code for example server program that uses TCP */
#ifndef unix
#define WIN32
#include <windows.h>
#include <winsock.h>
#else
#define closesocket close
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
#include <stdio.h>
#endif

#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define PROTOPORT       5193            /* default protocol port number */
#define QLEN            6               /* size of request queue        */

int     visits      =   0;              /* counts client connections    */


int main(int argc, char *argv[])
{
#ifdef WIN32
        WSADATA wsaData;
        WSAStartup(0x0101, &wsaData);
#endif

        struct  hostent  *ptrh;  /* pointer to a host table entry       */
        struct  protoent *ptrp;  /* pointer to a protocol table entry   */
        struct  sockaddr_in sad; /* structure to hold server's address  */
        struct  sockaddr_in cad; /* structure to hold client's address  */
        int     sd, sd2;         /* socket descriptors                  */
        int     port;            /* protocol port number                */
        int     alen;            /* length of address                   */
        char    buf[1000];       /* buffer for string the server sends  */
        memset((char *)&sad,0,sizeof(sad)); /* clear sockaddr structure */
        sad.sin_family = AF_INET;         /* set family to Internet     */
        sad.sin_addr.s_addr = INADDR_ANY; /* set the local IP address   */
       

        /* Check command-line argument for protocol port and extract    */
        /* port number if one is specified.  Otherwise, use the default */
        /* port value given by constant PROTOPORT                       */

        if (argc > 1) {                 /* if argument specified        */
                port = atoi(argv[1]);   /* convert argument to binary   */
        } else {
                port = PROTOPORT;       /* use default port number      */
        }
        if (port > 0)                   /* test for illegal value       */
                sad.sin_port = htons((u_short)port);
        else {                          /* print error message and exit */
                fprintf(stderr,"bad port number %s\n",argv[1]);
                exit(1);
        }

        /* Map TCP transport protocol name to protocol number */

        if ( ((int)(ptrp = getprotobyname("tcp"))) == 0) {
                fprintf(stderr, "cannot map \"tcp\" to protocol number");
                exit(1);
        }

        /* Create a socket */

        sd = socket(PF_INET, SOCK_STREAM, ptrp->p_proto);
        if (sd < 0) {
                fprintf(stderr, "socket creation failed\n");
                exit(1);
        }

        /* Bind a local address to the socket */

        if (bind(sd, (struct sockaddr *)&sad, sizeof(sad)) < 0) {
                fprintf(stderr,"bind failed\n");
                exit(1);
        }

        /* Specify size of request queue */

        if (listen(sd, QLEN) < 0) {
                fprintf(stderr,"listen failed\n");
                exit(1);
        }

        /* Main server loop - accept and handle requests */

        while (1)
        {
                alen = sizeof(cad);
                printf("\nI'm waiting for connections ...");
                fflush(stdout);
                if ( (sd2=accept(sd, (struct sockaddr *)&cad, &alen)) < 0) {
                        fprintf(stderr, "accept failed\n");
                        exit(1);
        }
                printf("\nI received one connection.\n");
                fflush(stdout);
                visits++;
                sprintf(buf,"This server has been contacted %d time%s\n",
                        visits,visits==1?".":"s.");
                send(sd2,buf,strlen(buf),0);
                printf("\nI sent the client a string.\n");
                fflush(stdout);
                closesocket(sd2);
        }
}


We can do the project in any language but since the example code is C/C++ I prefer to keep it in those languages if possible.
Also, I've tried to use the "fork()" and "bzero()" functions in the program; however, I am using Dev C++/Code::Blocks currently and they are not recognized by the IDE. Is there an alternative to these functions for Windows IDE or should I find another one to work in?
I could use some help with being pointed in the right direction if possible. The assignment is due is a few days, so a fast response would be great.
Thanks for taking the time to read this if you made it to this point.
Topic archived. No new replies allowed.