?
NEUE VERSION!
Da es viel übersichtlicher aussieht und wohl auch plattformunabhängig ist, habe ich nun folgende Methode verwendet, die auch wunderbar läuft:
#include <windows.h>
#include <winsock.h>
#include <process.h>
#include <stdio.h>
#define DEFAULT_PAGE "index.html"
#define HTTP_PORT 80
SOCKET c;
void threaded_socket(void *n) {
char b[1024], q[12], p[128], z[1024];
FILE *f;
while(recv(c, b, 999, 0) < 0) {
continue;
}
sscanf(b, "%s %s %s",q, p, z);
if(strcmp(p, "/") == 0) {
strcpy(p, strcat("/", DEFAULT_PAGE));
}
if(!strcmp(q, "GET")){
if ((f = fopen(p + 1, "r")) > 0){
int i = 0;
b[0] = fgetc(f);
while(!feof(f)) {
i++;
b[i] = fgetc(f);
}
fclose(f);
send(c, b, i, 0);
}
}
closesocket(c);
_endthread();
}
main(){
SOCKADDR_IN addr;
WSADATA wsa;
SOCKET s;
long rc;
rc = WSAStartup(MAKEWORD(2, 0), &wsa);
s = socket(AF_INET, SOCK_STREAM, 0);
memset(&addr,0, sizeof(SOCKADDR_IN));
addr.sin_family = AF_INET;
addr.sin_port = htons(HTTP_PORT);
addr.sin_addr.s_addr = ADDR_ANY;
rc = bind(s, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN));
if(listen(s, 3))
exit(1);
for(;;) {
c = accept(s, NULL, NULL);
_beginthread(threaded_socket, 0, NULL);
}
closesocket(s);
WSACleanup();
return 0;
}
Jedoch frage ich mich immernoch, ob meine Benutzung von Threads überhaupt Sinn macht. Ich hoffe, ihr könnt mir Gewissheit verschaffen.
solanum