git-svn: trunk@4948
Török Edvin authored on 2009/03/15 01:43:47... | ... |
@@ -1,3 +1,8 @@ |
1 |
+Sat Mar 14 18:43:42 EET 2009 (edwin) |
|
2 |
+------------------------------------ |
|
3 |
+ * clamd/others.c: better detect half-shut vs. full-shutdown sockets |
|
4 |
+ (bb #1441) |
|
5 |
+ |
|
1 | 6 |
Sat Mar 14 17:03:08 EET 2009 (edwin) |
2 | 7 |
------------------------------------ |
3 | 8 |
* clamd/scanner.c, unit_tests/check_clamd.c: better fix for bb |
... | ... |
@@ -509,6 +509,13 @@ int fds_poll_recv(struct fd_data *data, int timeout, int check_signals) |
509 | 509 |
if (revents & (POLLIN|POLLHUP)) { |
510 | 510 |
logg("$Received POLLIN|POLLHUP on fd %d\n",data->poll_data[i].fd); |
511 | 511 |
} |
512 |
+ if (revents & POLLHUP) { |
|
513 |
+ /* avoid SHUT_WR problem on Mac OS X */ |
|
514 |
+ int ret = send(data->poll_data[i].fd, &n, 0, 0); |
|
515 |
+ if (!ret || (ret == -1 && errno == EINTR)) |
|
516 |
+ revents &= ~POLLHUP; |
|
517 |
+ } |
|
518 |
+ |
|
512 | 519 |
if (revents & POLLIN) { |
513 | 520 |
int ret = read_fd_data(&data->buf[i]); |
514 | 521 |
/* Data available to be read */ |
... | ... |
@@ -576,8 +583,13 @@ int fds_poll_recv(struct fd_data *data, int timeout, int check_signals) |
576 | 576 |
if (ret == -1) |
577 | 577 |
logg("!Error condition on fd %d\n", |
578 | 578 |
data->buf[i].fd); |
579 |
- else |
|
579 |
+ else { |
|
580 |
+ /* avoid SHUT_WR problem on Mac OS X */ |
|
581 |
+ int ret = send(data->poll_data[i].fd, &n, 0, 0); |
|
582 |
+ if (!ret || (ret == -1 && errno == EINTR)) |
|
583 |
+ continue; |
|
580 | 584 |
logg("*Client disconnected\n"); |
585 |
+ } |
|
581 | 586 |
data->buf[i].got_newdata = -1; |
582 | 587 |
} |
583 | 588 |
} |