Parte de la información que desea está aquí: http://en.wikipedia.org/wiki/Common_Gateway_Interface . Puede que no parezca que lo que intentas hacer es muy complicado, pero es un poco más complicado de lo que piensas. Como dijo Dominic, la parte difícil será abrir el puerto y leer desde el socket, bastante difícil en c ++ land.
Para empezar, recomendaría usar un servidor web existente y escribir su propio módulo CGI. El servidor web se encargará del lado de los sockets, y básicamente solo está leyendo datos de variables de entorno o argumentos de línea de comandos (si es una solicitud GET) o del stdin si es una POST (creo que son datos de mi memoria que tiene unos 15 años). Lo que quieres es algo como esto:
#include <stdio.h>
#include <string.h>
int main(){
char *s=getenv("CONTENT_LENGTH");
int i=atoi(getenv("CONTENT_LENGTH"));
printf("Content-type: text/html\n\n");
printf("%s\n<br />",s); //Shows you CONTENT_LENGTH works
printf("%d\n<br />",i); //Shows you it was converted to int
char *tmp = new char[100];
fread(tmp,i,1,stdin); //read from stdin something of i bytes to tmp
printf("%s\n<br />",tmp);
return 0;
}
Por cierto, como una lección para el lector, esta aplicación tiene un error de desbordamiento de búfer. Probablemente quieras arreglar eso :)