Fixed fd race condition.

master
Nicolas Favre-Felix 14 years ago
parent 239c9004dc
commit 071341fccf

@ -8,6 +8,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
static int
http_client_on_url(struct http_parser *p, const char *at, size_t sz) {
@ -238,8 +239,8 @@ http_client_read(struct http_client *c) {
ret = read(c->fd, buffer, sizeof(buffer));
if(ret <= 0) {
/* printf("Broken read on c=%p, fd=%d.\n", (void*)c, c->fd); */
close(c->fd);
/* printf("Broken read on c=%p, fd=%d. (%s)\n", (void*)c, c->fd, strerror(errno)); */
/* close(c->fd); */
http_client_free(c);
return -1;
}

@ -81,9 +81,6 @@ format_send_reply(struct cmd *cmd, const char *p, size_t sz, const char *content
http_response_set_header(&resp, "Connection", "Close");
}
http_response_write(&resp, cmd->fd);
if(!cmd->keep_alive) {
close(cmd->fd);
}
free(etag);
}

@ -132,7 +132,7 @@ http_response_write(struct http_response *r, int fd) {
}
ret = write(fd, s, sz);
if(!keep_alive) {
if(!keep_alive && ret == sz) {
/* printf("response write, close fd=%d\n", fd); */
close(fd);
}

@ -40,7 +40,7 @@ worker_can_read(int fd, short event, void *p) {
ret = http_client_read(c);
if(ret <= 0) {
printf("client disconnected\n");
/* printf("client %d disconnected\n", fd); */
return;
}

Loading…
Cancel
Save