QEMU-Devel Archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] report a error message if -net socket can not connect to server
@ 2015-12-04  6:01 Li Zhijian
  0 siblings, 0 replies; only message in thread
From: Li Zhijian @ 2015-12-04  6:01 UTC (permalink / raw
  To: jasowang, qemu-devel; +Cc: Li Zhijian

From: Li Zhijian <lizhijan@cn.fujitsu.com>

-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 <lizhijan@cn.fujitsu.com>
---
 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

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2015-12-04  6:03 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-04  6:01 [Qemu-devel] [PATCH] report a error message if -net socket can not connect to server Li Zhijian

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).