Made sockets nonblocking (I'm a fool who didn't do this and spent several hours trying to figure out why I couldn't handle a second request if firefox was on the page I'm so dumb I hate myself I hate coding I hate the internet computers were a mistake)
This commit is contained in:
102
example/logs
102
example/logs
@@ -183,3 +183,105 @@
|
|||||||
[2022-01-30T18:05:53Z] swebs started
|
[2022-01-30T18:05:53Z] swebs started
|
||||||
[2022-01-30T18:06:10Z] swebs started
|
[2022-01-30T18:06:10Z] swebs started
|
||||||
[2022-01-30T18:06:27Z] swebs started
|
[2022-01-30T18:06:27Z] swebs started
|
||||||
|
[2022-01-30T18:11:39Z] swebs started
|
||||||
|
[2022-01-30T18:11:44Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:44Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:44Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:44Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:44Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:44Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:44Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:44Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:44Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:44Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:46Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:47Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:47Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:47Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:47Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:47Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:47Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:47Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:47Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:47Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:47Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:48Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:48Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:48Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:48Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:48Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:48Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:48Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:48Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:48Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:48Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:11:55Z] swebs started
|
||||||
|
[2022-01-30T18:12:05Z] Accepting a stream failed
|
||||||
|
[2022-01-30T18:12:15Z] swebs started
|
||||||
|
[2022-01-30T18:13:00Z] swebs started
|
||||||
|
[2022-01-30T18:13:37Z] swebs started
|
||||||
|
[2022-01-30T18:13:46Z] swebs started
|
||||||
|
[2022-01-30T18:15:42Z] swebs started
|
||||||
|
[2022-01-30T18:15:56Z] swebs started
|
||||||
|
[2022-01-30T18:16:10Z] swebs started
|
||||||
|
[2022-01-30T18:17:19Z] swebs started
|
||||||
|
[2022-01-30T18:17:35Z] swebs started
|
||||||
|
[2022-01-30T18:18:41Z] swebs started
|
||||||
|
[2022-01-30T18:19:01Z] swebs started
|
||||||
|
[2022-01-30T18:19:14Z] swebs started
|
||||||
|
[2022-01-30T18:20:30Z] swebs started
|
||||||
|
[2022-01-30T18:21:20Z] swebs started
|
||||||
|
[2022-01-30T18:23:10Z] swebs started
|
||||||
|
[2022-01-30T18:24:01Z] swebs started
|
||||||
|
[2022-01-30T18:25:19Z] swebs started
|
||||||
|
[2022-01-30T18:25:39Z] swebs started
|
||||||
|
[2022-01-30T18:26:13Z] swebs started
|
||||||
|
[2022-01-30T18:27:14Z] swebs started
|
||||||
|
[2022-01-30T18:27:30Z] swebs started
|
||||||
|
[2022-01-30T18:27:59Z] swebs started
|
||||||
|
[2022-01-30T18:28:03Z] swebs started
|
||||||
|
[2022-01-30T18:30:10Z] swebs started
|
||||||
|
[2022-01-30T18:30:17Z] swebs started
|
||||||
|
[2022-01-30T18:32:21Z] swebs started
|
||||||
|
[2022-01-30T18:32:24Z] swebs started
|
||||||
|
[2022-01-30T18:32:54Z] swebs started
|
||||||
|
[2022-01-30T18:32:59Z] swebs started
|
||||||
|
[2022-01-30T18:33:18Z] swebs started
|
||||||
|
[2022-01-30T18:33:28Z] swebs started
|
||||||
|
[2022-01-30T18:34:35Z] swebs started
|
||||||
|
[2022-01-30T18:35:17Z] swebs started
|
||||||
|
[2022-01-30T18:35:30Z] swebs started
|
||||||
|
[2022-01-30T18:37:09Z] swebs started
|
||||||
|
[2022-01-30T18:37:40Z] swebs started
|
||||||
|
[2022-01-30T18:38:20Z] swebs started
|
||||||
|
[2022-01-30T18:38:49Z] swebs started
|
||||||
|
[2022-01-30T18:38:54Z] swebs started
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
../build/swebs -j 2 -s sitefile -o logs -p 8000
|
../build/swebs -s sitefile -o logs -p 8000 -b 100
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
define transport TLS
|
#define transport TLS
|
||||||
define key domain.key
|
define key domain.key
|
||||||
define cert domain.crt
|
define cert domain.crt
|
||||||
define timeout 2000
|
define timeout 2000
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ static int processChar(Connection *conn, char c, Sitefile *site) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long diff(struct timespec *t1, struct timespec *t2) {
|
static long diff(struct timespec *t1, struct timespec *t2) {
|
||||||
return (t2->tv_sec - t1->tv_sec) * 1000 +
|
return (t2->tv_sec - t1->tv_sec) * 1000 +
|
||||||
(t2->tv_nsec - t1->tv_nsec) / 1000000;
|
(t2->tv_nsec - t1->tv_nsec) / 1000000;
|
||||||
}
|
}
|
||||||
@@ -220,12 +220,11 @@ int updateConnection(Connection *conn, Sitefile *site) {
|
|||||||
if (received < 0)
|
if (received < 0)
|
||||||
return errno != EAGAIN;
|
return errno != EAGAIN;
|
||||||
if (received == 0)
|
if (received == 0)
|
||||||
break;
|
return 0;
|
||||||
memcpy(&conn->lastdata, ¤tTime, sizeof(struct timespec));
|
memcpy(&conn->lastdata, ¤tTime, sizeof(struct timespec));
|
||||||
for (unsigned long i = 0; i < received; i++) {
|
for (unsigned long i = 0; i < received; i++) {
|
||||||
if (processChar(conn, buff[i], site))
|
if (processChar(conn, buff[i], site))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Listener *createListener(SocketType type, uint16_t port, int backlog, ...);
|
|||||||
//extra arguments depend on type (similar to fcntl):
|
//extra arguments depend on type (similar to fcntl):
|
||||||
//tcp: (void)
|
//tcp: (void)
|
||||||
//tls: (char *keyfile, char *certfile, char *ocspfile)
|
//tls: (char *keyfile, char *certfile, char *ocspfile)
|
||||||
Stream *acceptStream(Listener *listener);
|
Stream *acceptStream(Listener *listener, int flags);
|
||||||
//returns 1 on error, accepts fcntl flags
|
//returns 1 on error, accepts fcntl flags
|
||||||
|
|
||||||
void freeListener(Listener *listener);
|
void freeListener(Listener *listener);
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
char *logout = "/var/log/swebs.log";
|
char *logout = "/var/log/swebs.log";
|
||||||
char *sitefile = NULL;
|
char *sitefile = NULL;
|
||||||
int processes = 8;
|
int processes = sysconf(_SC_NPROCESSORS_ONLN) + 1;
|
||||||
uint16_t port = 443;
|
uint16_t port = 443;
|
||||||
int backlog = 100;
|
int backlog = 100;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@@ -76,7 +76,7 @@ int main(int argc, char **argv) {
|
|||||||
printf(
|
printf(
|
||||||
"Usage: swebs [options]\n"
|
"Usage: swebs [options]\n"
|
||||||
" -o [out] Set the log file (default: /var/log/swebs.log)\n"
|
" -o [out] Set the log file (default: /var/log/swebs.log)\n"
|
||||||
" -j [cores] Use that many cores (default: 8)\n"
|
" -j [cores] Use that many cores (default: $(nproc)+1)\n"
|
||||||
" -s [site file] Use that site file (required)\n"
|
" -s [site file] Use that site file (required)\n"
|
||||||
" -p [port] Set the port (default: 443)\n"
|
" -p [port] Set the port (default: 443)\n"
|
||||||
" -b [backlog] Set the socket backlog (default: 100)\n"
|
" -b [backlog] Set the socket backlog (default: 100)\n"
|
||||||
@@ -145,7 +145,7 @@ int main(int argc, char **argv) {
|
|||||||
createLog("swebs started");
|
createLog("swebs started");
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
Stream *stream = acceptStream(listener);
|
Stream *stream = acceptStream(listener, O_NONBLOCK);
|
||||||
if (stream == NULL) {
|
if (stream == NULL) {
|
||||||
createLog("Accepting a stream failed");
|
createLog("Accepting a stream failed");
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -142,6 +142,7 @@ int sendResponse(Connection *conn, Sitefile *site) {
|
|||||||
readResponse(conn, site->content[i].arg);
|
readResponse(conn, site->content[i].arg);
|
||||||
goto end;
|
goto end;
|
||||||
default:
|
default:
|
||||||
|
sendErrorResponse(conn, ERROR_500);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ error:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream *acceptStream(Listener *listener) {
|
Stream *acceptStream(Listener *listener, int flags) {
|
||||||
Stream *ret = malloc(sizeof(Stream));
|
Stream *ret = malloc(sizeof(Stream));
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -104,6 +104,9 @@ Stream *acceptStream(Listener *listener) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int oldflags = fcntl(ret->fd, F_GETFL);
|
||||||
|
fcntl(ret->fd, F_SETFL, oldflags | flags);
|
||||||
|
|
||||||
switch (listener->type) {
|
switch (listener->type) {
|
||||||
case TCP: default:
|
case TCP: default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user