Bonsoir,

Je souhaite réaliser un serveur proxy unix en c, capable de gérer une connexion http 1.1.

Je vous présente un algo qui dans un premier temps gère la connexion jusqu'au serveur web et affiche le résultats (printf) du contenu de la page web reçue au niveau du proxy.

je me suis inspiré de ces morceaux de code : http://beej.us/guide/bgnet/output/ht...l#simpleserver

J'aimerais d'abord savoir si je suis sur la bonne voie. J'aimerais ensuite comprendre comment je peux gérer la connexion persistante (keep-alive) dû à la norme http1.1 qui m'oblige à récupérer tous les éléments de la page web sans avoir à me reconnecter pour chacun de ces éléments.

(les noms dans les parenthèses d'une fonction correspondent aux entrées
les noms à droite de la flèche -> correspondent aux sorties)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Get proxy information :
  getaddrinfo(port, ProxyHints) -> rv, servinfo (proxyInfo)
Get file socket descriptor + bind :
  for(p=proxyInfo ; ; ) // search the first result
    socket(p) -> sockProxy   <br>    Bind(p,sockProxy)
Listen(sockProxy)
While(1)
  Accept(sockProxy) -> sockClient    //we create a socket to manage the client
  fork()
    Close(sockProxy) 
    Recv(sockClient) -> http_request (string)
    Extract host server name from http_request
    Get web server information
      getaddrinfo(host name, port 80, webServerHints) -> rv2, servWebInfo
    Extract URL from http_request
    Extract user agent from http_request
    Create the new request (to send to the web server)
    for(p2=servWebInfo) // search the first result 
      socket(p2) -> webServerSock  //we create a socket to manage the web server
    connect(webServerSock, servWebInfo)
    send(new_request)
    recv(information_from_web_server)
    printf(information_from_web_server)