fix select

git-svn-id: file:///raid/svn-personal/tewi/trunk@97 8739d7e6-ffea-ec47-b151-bdff447c6205
This commit is contained in:
Nishi 2024-09-19 14:33:18 +00:00
parent bad9d5ae3a
commit c342c07122

View File

@ -43,6 +43,10 @@
#include <netinet/tcp.h> #include <netinet/tcp.h>
#endif #endif
#ifdef __HAIKU__
#include <OS.h>
#endif
extern struct tw_config config; extern struct tw_config config;
extern char tw_server[]; extern char tw_server[];
@ -391,7 +395,6 @@ char* tw_get_icon(const char* mime, struct tw_config_entry* vhost_entry) {
return icon; return icon;
} }
#ifdef __MINGW32__
struct pass_entry { struct pass_entry {
int sock; int sock;
int port; int port;
@ -399,7 +402,10 @@ struct pass_entry {
SOCKADDR addr; SOCKADDR addr;
}; };
#ifdef __MINGW32__
unsigned int WINAPI tw_server_pass(void* ptr) { unsigned int WINAPI tw_server_pass(void* ptr) {
#elif defined(__HAIKU__)
int32_t tw_server_pass(void* ptr) {
int sock = ((struct pass_entry*)ptr)->sock; int sock = ((struct pass_entry*)ptr)->sock;
bool ssl = ((struct pass_entry*)ptr)->ssl; bool ssl = ((struct pass_entry*)ptr)->ssl;
int port = ((struct pass_entry*)ptr)->port; int port = ((struct pass_entry*)ptr)->port;
@ -801,12 +807,14 @@ void tw_server_loop(void) {
int clen = sizeof(claddr); int clen = sizeof(claddr);
int sock = accept(sockets[i], (struct sockaddr*)&claddr, &clen); int sock = accept(sockets[i], (struct sockaddr*)&claddr, &clen);
cm_log("Server", "New connection accepted"); cm_log("Server", "New connection accepted");
#ifdef __MINGW32__ #if defined(__MINGW32__) || defined(__HAIKU__)
struct pass_entry* e = malloc(sizeof(*e)); struct pass_entry* e = malloc(sizeof(*e));
e->sock = sock; e->sock = sock;
e->ssl = config.ports[i] & (1ULL << 32); e->ssl = config.ports[i] & (1ULL << 32);
e->port = config.ports[i]; e->port = config.ports[i];
e->addr = claddr; e->addr = claddr;
#endif
#ifdef __MINGW32__
int j; int j;
for(j = 0; j < sizeof(threads) / sizeof(threads[0]); j++) { for(j = 0; j < sizeof(threads) / sizeof(threads[0]); j++) {
if(threads[j].used) { if(threads[j].used) {
@ -825,17 +833,15 @@ void tw_server_loop(void) {
break; break;
} }
} }
#elif defined(__HAIKU__)
thread_id thr = spawn_Thread(tw_server_pass, "Tewi HTTPd", 60, e);
#else #else
pid_t pid = fork(); pid_t pid = fork();
if(pid == 0) { if(pid == 0) {
int j; int j;
for(j = 0; j < sockcount; j++) close_socket(sockets[j]); for(j = 0; j < sockcount; j++) close_socket(sockets[j]);
tw_server_pass(sock, config.ports[i] & (1ULL << 32), config.ports[i], claddr); tw_server_pass(sock, config.ports[i] & (1ULL << 32), config.ports[i], claddr);
#ifdef __HAIKU__
exit(0);
#else
_exit(0); _exit(0);
#endif
} else { } else {
close_socket(sock); close_socket(sock);
} }