[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] report a error message if -net socket can not conne
From: |
Li Zhijian |
Subject: |
[Qemu-devel] [PATCH] report a error message if -net socket can not connect to server |
Date: |
Fri, 4 Dec 2015 14:01:00 +0800 |
From: Li Zhijian <address@hidden>
-netdev socket,connect=xx:xx now is asynchronous to connect
listening server, if we don't start listening server before
connecting, no error is detected but we can connect to listening
server forever.
Just report a error message in this case?
Signed-off-by: Li Zhijian <address@hidden>
---
net/socket.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/net/socket.c b/net/socket.c
index e8605d4..a82da36 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -46,6 +46,7 @@ typedef struct NetSocketState {
IOHandler *send_fn; /* differs between SOCK_STREAM/SOCK_DGRAM */
bool read_poll; /* waiting to receive data? */
bool write_poll; /* waiting to transmit data? */
+ bool connected; /* connect socket is connected */
} NetSocketState;
static void net_socket_accept(void *opaque);
@@ -424,6 +425,21 @@ err:
static void net_socket_connect(void *opaque)
{
NetSocketState *s = opaque;
+ int err = -1;
+ socklen_t len = sizeof(err);
+
+ if (s->listen_fd == -1 && !s->connected) {
+ if (getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &err, &len)) {
+ error_report("get socket opt error %s", strerror(errno));
+ /* FIXME: cleanup and exit ? */
+ } else if (err) {
+ errno = err;
+ error_report("net socket is not connected %s\n", strerror(errno));
+ /* FIXME: cleanup and exit ? */
+ } else {
+ s->connected = true;
+ }
+ }
s->send_fn = net_socket_send;
net_socket_read_poll(s, true);
}
@@ -451,6 +467,7 @@ static NetSocketState
*net_socket_fd_init_stream(NetClientState *peer,
s->fd = fd;
s->listen_fd = -1;
+ s->connected = is_connected;
/* Disable Nagle algorithm on TCP sockets to reduce latency */
socket_set_nodelay(fd);
--
1.7.12.4
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [PATCH] report a error message if -net socket can not connect to server,
Li Zhijian <=