[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 3/7] char: tcp: Use new iohandler api
From: |
Amit Shah |
Subject: |
[Qemu-devel] [PATCH 3/7] char: tcp: Use new iohandler api |
Date: |
Tue, 22 Feb 2011 15:48:32 +0530 |
Update the tcp code to use the new iohandler api. The change is mostly
mechanical with a new iohandler function calling the older functions
depending on the value of the 'mask' field.
Signed-off-by: Amit Shah <address@hidden>
---
qemu-char.c | 48 ++++++++++++++++++++++++++++++++++++------------
1 files changed, 36 insertions(+), 12 deletions(-)
diff --git a/qemu-char.c b/qemu-char.c
index bd4e944..ba58c18 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -21,6 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
+#include "iohandler.h"
#include "qemu-common.h"
#include "net.h"
#include "monitor.h"
@@ -1909,7 +1910,7 @@ typedef struct {
int msgfd;
} TCPCharDriver;
-static void tcp_chr_accept(void *opaque);
+static int tcp_accept_handler(void *opaque, unsigned int mask);
static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
{
@@ -2064,9 +2065,10 @@ static void tcp_chr_read(void *opaque)
/* connection closed */
s->connected = 0;
if (s->listen_fd >= 0) {
- qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
+ assign_iohandler(s->listen_fd, tcp_accept_handler, IOH_MASK_READ,
+ chr);
}
- qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+ remove_iohandler(s->fd);
closesocket(s->fd);
s->fd = -1;
qemu_chr_event(chr, CHR_EVENT_CLOSED);
@@ -2078,6 +2080,22 @@ static void tcp_chr_read(void *opaque)
}
}
+static int tcp_iohandler(void *opaque, unsigned int mask)
+{
+ int ret;
+
+ ret = 0;
+ switch(mask) {
+ case IOH_MASK_CAN_READ:
+ ret = tcp_chr_read_poll(opaque);
+ break;
+ case IOH_MASK_READ:
+ tcp_chr_read(opaque);
+ break;
+ }
+ return ret;
+}
+
#ifndef _WIN32
CharDriverState *qemu_chr_open_eventfd(int eventfd)
{
@@ -2091,8 +2109,8 @@ static void tcp_chr_connect(void *opaque)
TCPCharDriver *s = chr->opaque;
s->connected = 1;
- qemu_set_fd_handler2(s->fd, tcp_chr_read_poll,
- tcp_chr_read, NULL, chr);
+ assign_iohandler(s->fd, tcp_iohandler, IOH_MASK_CAN_READ|IOH_MASK_READ,
+ chr);
qemu_chr_generic_open(chr);
}
@@ -2117,7 +2135,7 @@ static void socket_set_nodelay(int fd)
setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
}
-static void tcp_chr_accept(void *opaque)
+static int tcp_accept_handler(void *opaque, unsigned int mask)
{
CharDriverState *chr = opaque;
TCPCharDriver *s = chr->opaque;
@@ -2129,6 +2147,10 @@ static void tcp_chr_accept(void *opaque)
socklen_t len;
int fd;
+ if (!(mask & IOH_MASK_READ)) {
+ return 0;
+ }
+
for(;;) {
#ifndef _WIN32
if (s->is_unix) {
@@ -2142,7 +2164,7 @@ static void tcp_chr_accept(void *opaque)
}
fd = qemu_accept(s->listen_fd, addr, &len);
if (fd < 0 && errno != EINTR) {
- return;
+ return 0;
} else if (fd >= 0) {
if (s->do_telnetopt)
tcp_chr_telnet_init(fd);
@@ -2153,19 +2175,21 @@ static void tcp_chr_accept(void *opaque)
if (s->do_nodelay)
socket_set_nodelay(fd);
s->fd = fd;
- qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
+ remove_iohandler(s->listen_fd);
tcp_chr_connect(chr);
+
+ return 0;
}
static void tcp_chr_close(CharDriverState *chr)
{
TCPCharDriver *s = chr->opaque;
if (s->fd >= 0) {
- qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+ remove_iohandler(s->fd);
closesocket(s->fd);
}
if (s->listen_fd >= 0) {
- qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
+ remove_iohandler(s->listen_fd);
closesocket(s->listen_fd);
}
qemu_free(s);
@@ -2227,7 +2251,7 @@ static CharDriverState *qemu_chr_open_socket(QemuOpts
*opts)
if (is_listen) {
s->listen_fd = fd;
- qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
+ assign_iohandler(s->listen_fd, tcp_accept_handler, IOH_MASK_READ, chr);
if (is_telnet)
s->do_telnetopt = 1;
@@ -2257,7 +2281,7 @@ static CharDriverState *qemu_chr_open_socket(QemuOpts
*opts)
if (is_listen && is_waitconnect) {
printf("QEMU waiting for connection on: %s\n",
chr->filename);
- tcp_chr_accept(chr);
+ tcp_accept_handler(chr, IOH_MASK_READ);
socket_set_nonblock(s->listen_fd);
}
return chr;
--
1.7.4
- [Qemu-devel] [PATCH 2/7] iohandlers: Introduce a new API, (continued)
- [Qemu-devel] [PATCH 2/7] iohandlers: Introduce a new API, Amit Shah, 2011/02/22
- Re: [Qemu-devel] [PATCH 2/7] iohandlers: Introduce a new API, Alon Levy, 2011/02/22
- Re: [Qemu-devel] [PATCH 2/7] iohandlers: Introduce a new API, Avi Kivity, 2011/02/22
- Re: [Qemu-devel] [PATCH 2/7] iohandlers: Introduce a new API, Amit Shah, 2011/02/22
- Re: [Qemu-devel] [PATCH 2/7] iohandlers: Introduce a new API, Anthony Liguori, 2011/02/22
- Re: [Qemu-devel] [PATCH 2/7] iohandlers: Introduce a new API, Avi Kivity, 2011/02/22
- Re: [Qemu-devel] [PATCH 2/7] iohandlers: Introduce a new API, Anthony Liguori, 2011/02/22
- Re: [Qemu-devel] [PATCH 2/7] iohandlers: Introduce a new API, Avi Kivity, 2011/02/23
[Qemu-devel] Re: [PATCH 2/7] iohandlers: Introduce a new API, Anthony Liguori, 2011/02/22
[Qemu-devel] [PATCH 3/7] char: tcp: Use new iohandler api,
Amit Shah <=
[Qemu-devel] [PATCH 4/7] char: udp: Use new iohandler api, Amit Shah, 2011/02/22
[Qemu-devel] [PATCH 5/7] char: fd: Use new iohandler api, Amit Shah, 2011/02/22
[Qemu-devel] [PATCH 6/7] char: stdio: Use new iohandler api, Amit Shah, 2011/02/22
[Qemu-devel] [PATCH 7/7] char: pty: Use new iohandler api, Amit Shah, 2011/02/22