| From 5b79aa329a378537ec939cee75df10ca073b367f Mon Sep 17 00:00:00 2001 |
| From: Amit Shah <amit.shah@redhat.com> |
| Date: Mon, 21 Mar 2011 21:57:47 +0100 |
| Subject: [PATCH 101/114] char: Split out tcp socket close code in a separate |
| function |
| |
| Signed-off-by: Amit Shah <amit.shah@redhat.com> |
| |
| qemu-char.c | 25 ++++++++++++++++--------- |
| 1 file changed, 16 insertions(+), 9 deletions(-) |
| |
| diff --git a/qemu-char.c b/qemu-char.c |
| index fe1126f..78d2a69 100644 |
| |
| |
| @@ -2141,6 +2141,21 @@ typedef struct { |
| |
| static void tcp_chr_accept(void *opaque); |
| |
| +static void tcp_closed(void *opaque) |
| +{ |
| + CharDriverState *chr = opaque; |
| + TCPCharDriver *s = chr->opaque; |
| + |
| + s->connected = 0; |
| + if (s->listen_fd >= 0) { |
| + qemu_set_fd_handler2(s->listen_fd, NULL, tcp_chr_accept, NULL, chr); |
| + } |
| + qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL); |
| + closesocket(s->fd); |
| + s->fd = -1; |
| + qemu_chr_be_event(chr, CHR_EVENT_CLOSED); |
| +} |
| + |
| static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len) |
| { |
| TCPCharDriver *s = chr->opaque; |
| @@ -2291,15 +2306,7 @@ static void tcp_chr_read(void *opaque) |
| len = s->max_size; |
| size = tcp_chr_recv(chr, (void *)buf, len); |
| if (size == 0) { |
| - /* connection closed */ |
| - s->connected = 0; |
| - if (s->listen_fd >= 0) { |
| - qemu_set_fd_handler2(s->listen_fd, NULL, tcp_chr_accept, NULL, chr); |
| - } |
| - qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL); |
| - closesocket(s->fd); |
| - s->fd = -1; |
| - qemu_chr_be_event(chr, CHR_EVENT_CLOSED); |
| + tcp_closed(chr); |
| } else if (size > 0) { |
| if (s->do_telnetopt) |
| tcp_chr_process_IAC_bytes(chr, s, buf, &size); |
| -- |
| 1.7.10.4 |
| |