Algumas das informações que você deseja estão aqui - http://en.wikipedia.org/wiki/Common_Gateway_Interface . Pode não parecer que o que você está tentando fazer seja muito complicado, mas é um pouco mais complicado do que você imagina. Como Dominic disse, a parte complicada será abrir a porta e ler do soquete - bastante difícil em c ++ land.
Eu recomendaria que, para começar, use um servidor web existente e escreva seu próprio módulo CGI. O servidor da Web cuidará do lado dos soquetes, e basicamente você está apenas lendo dados de variáveis de ambiente ou argumentos de linha de comando (se for uma solicitação GET) ou do stdin se for um POST (acho que são dados da minha memória que tem cerca de 15 anos). O que você quer é algo como isto:
#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;
}
BTW como uma lição para o leitor, esta aplicação possui um erro de estouro de buffer. Você provavelmente deseja corrigir isso :)