qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] net/socket: change net_socket_listen_init to us


From: Jason Wang
Subject: Re: [Qemu-devel] [PATCH] net/socket: change net_socket_listen_init to use qemu-socket functions
Date: Fri, 2 Feb 2018 11:02:10 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0



On 2018年02月01日 16:20, Zihan Yang wrote:
net_socket_listen_init directly uses parse_host_port, bind and listen,
change it to use functions in include/qemu/sockets.h

Signed-off-by: Zihan Yang <address@hidden>
---
  net/socket.c | 30 +++++++++---------------------
  1 file changed, 9 insertions(+), 21 deletions(-)

diff --git a/net/socket.c b/net/socket.c
index 6917fbc..e4b1f47 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -494,36 +494,24 @@ static int net_socket_listen_init(NetClientState *peer,
  {
      NetClientState *nc;
      NetSocketState *s;
-    struct sockaddr_in saddr;
-    int fd, ret;
+    SocketAddress *saddr;
+    Error *local_err = NULL;
+    int fd;
- if (parse_host_port(&saddr, host_str, errp) < 0) {
+    saddr = socket_parse(host_str, &local_err);
+    if (NULL != local_err) {
+        error_setg_errno(errp, errno, "socket_parse failed");
          return -1;
      }
- fd = qemu_socket(PF_INET, SOCK_STREAM, 0);
+    fd = socket_listen(saddr, errp);
      if (fd < 0) {
-        error_setg_errno(errp, errno, "can't create stream socket");
+        error_setg_errno(errp, errno, "can't listen on address");
+        qapi_free_SocketAddress(saddr);
          return -1;
      }
      qemu_set_nonblock(fd);
- socket_set_fast_reuse(fd);
-
-    ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
-    if (ret < 0) {
-        error_setg_errno(errp, errno, "can't bind ip=%s to socket",
-                         inet_ntoa(saddr.sin_addr));
-        closesocket(fd);
-        return -1;
-    }
-    ret = listen(fd, 0);
-    if (ret < 0) {
-        error_setg_errno(errp, errno, "can't listen on socket");
-        closesocket(fd);
-        return -1;
-    }
-
      nc = qemu_new_net_client(&net_socket_info, peer, model, name);
      s = DO_UPCAST(NetSocketState, nc, nc);
      s->fd = -1;

This allows more kinds of socket to be created with listen= e.g unix domain socket or vsock but it doesn't allow such kinds of socket to be created with connect=.

And change to use socket_()* is tricky especially the connect part. You may have a look at:

6701e5514bea Revert "Change net/socket.c to use socket_*() functions" again
616018352c24 Revert "Change net/socket.c to use socket_*() functions"

Thanks




reply via email to

[Prev in Thread] Current Thread [Next in Thread]