All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.