mirror of
https://github.com/emikulic/darkhttpd.git
synced 2023-08-10 21:13:08 +03:00
. Partial content is done, mark off TODO.
. Decrease send BUFSIZE to 40,000 (max I've seen is 33,000). . Remove a debugf() from poll_send_reply(). . Add exit_quickly(). . SIGINT and SIGQUIT exit_quickly().
This commit is contained in:
parent
67604878ec
commit
d7bfc32d6d
@ -13,7 +13,7 @@
|
|||||||
* x Actually serve files.
|
* x Actually serve files.
|
||||||
* . Generate directory listings.
|
* . Generate directory listings.
|
||||||
* x Log to file.
|
* x Log to file.
|
||||||
* . Partial content.
|
* x Partial content.
|
||||||
* x If-Modified-Since.
|
* x If-Modified-Since.
|
||||||
* x Test If-Mod-Since with IE, Phoenix, lynx, links, Opera
|
* x Test If-Mod-Since with IE, Phoenix, lynx, links, Opera
|
||||||
* . Keep-alive connections.
|
* . Keep-alive connections.
|
||||||
@ -1291,7 +1291,7 @@ static void poll_send_reply(struct connection *conn)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* from file! */
|
/* from file! */
|
||||||
#define BUFSIZE 65000
|
#define BUFSIZE 40000
|
||||||
char buf[BUFSIZE];
|
char buf[BUFSIZE];
|
||||||
size_t amount = min((size_t)BUFSIZE,
|
size_t amount = min((size_t)BUFSIZE,
|
||||||
conn->reply_length - conn->reply_sent);
|
conn->reply_length - conn->reply_sent);
|
||||||
@ -1301,10 +1301,6 @@ static void poll_send_reply(struct connection *conn)
|
|||||||
(long)(conn->reply_start + conn->reply_sent), SEEK_SET) == -1)
|
(long)(conn->reply_start + conn->reply_sent), SEEK_SET) == -1)
|
||||||
err(1, "fseek(%d)", conn->reply_start + conn->reply_sent);
|
err(1, "fseek(%d)", conn->reply_start + conn->reply_sent);
|
||||||
|
|
||||||
debugf("start=%d, sent=%d, length=%d\n",
|
|
||||||
conn->reply_start,
|
|
||||||
conn->reply_sent, conn->reply_length);
|
|
||||||
|
|
||||||
if (fread(buf, amount, 1, conn->reply_file) != 1)
|
if (fread(buf, amount, 1, conn->reply_file) != 1)
|
||||||
{
|
{
|
||||||
if (feof(conn->reply_file))
|
if (feof(conn->reply_file))
|
||||||
@ -1468,6 +1464,34 @@ static void httpd_poll(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------------
|
||||||
|
* SIG{INT,QUIT} handler - clean up quickly and exit by re-sending the signal
|
||||||
|
*
|
||||||
|
* http://www.cons.org/cracauer/sigint.html
|
||||||
|
*/
|
||||||
|
static void exit_quickly(int sig)
|
||||||
|
{
|
||||||
|
struct connection *conn;
|
||||||
|
|
||||||
|
printf("caught %s, cleaning up...", strsignal(sig)); fflush(stdout);
|
||||||
|
LIST_FOREACH(conn, &connlist, entries)
|
||||||
|
{
|
||||||
|
LIST_REMOVE(conn, entries);
|
||||||
|
free_connection(conn);
|
||||||
|
free(conn);
|
||||||
|
}
|
||||||
|
close(sockin);
|
||||||
|
printf("done!\n");
|
||||||
|
|
||||||
|
/* Send back to the default handler - this ensures the correct exit
|
||||||
|
* value will be used.
|
||||||
|
*/
|
||||||
|
if (signal(sig, SIG_DFL) == SIG_ERR) err(1, "signal(SIG_DFL)");
|
||||||
|
if (raise(sig) == -1) err(1, "raise()");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------
|
/* ---------------------------------------------------------------------------
|
||||||
* Execution starts here.
|
* Execution starts here.
|
||||||
*/
|
*/
|
||||||
@ -1485,13 +1509,17 @@ int main(int argc, char *argv[])
|
|||||||
if (logfile == NULL) err(1, "fopen(\"%s\")", logfile_name);
|
if (logfile == NULL) err(1, "fopen(\"%s\")", logfile_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* signals */
|
||||||
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
|
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
|
||||||
err(1, "signal(ignore SIGPIPE)");
|
err(1, "signal(ignore SIGPIPE)");
|
||||||
|
if (signal(SIGINT, exit_quickly) == SIG_ERR)
|
||||||
|
err(1, "signal(SIGINT)");
|
||||||
|
if (signal(SIGQUIT, exit_quickly) == SIG_ERR)
|
||||||
|
err(1, "signal(SIGQUIT)");
|
||||||
|
|
||||||
for (;;) httpd_poll();
|
for (;;) httpd_poll();
|
||||||
|
|
||||||
(void) close(sockin); /* unreachable =/ fix later */
|
return 0; /* unreachable */
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* vim:set tabstop=4 shiftwidth=4 expandtab tw=78: */
|
/* vim:set tabstop=4 shiftwidth=4 expandtab tw=78: */
|
||||||
|
Loading…
Reference in New Issue
Block a user