]> git.proxmox.com Git - qemu.git/blobdiff - slirp/socket.c
rng-egd: remove redundant free
[qemu.git] / slirp / socket.c
index 207109c7eca223745db81b4037ecfd2b22708c66..37ac5cf2fb260cffbf85b5f4f80b72d0fbcc9053 100644 (file)
@@ -51,6 +51,7 @@ socreate(Slirp *slirp)
     so->so_state = SS_NOFDREF;
     so->s = -1;
     so->slirp = slirp;
+    so->pollfds_idx = -1;
   }
   return(so);
 }
@@ -71,6 +72,8 @@ sofree(struct socket *so)
       slirp->tcp_last_so = &slirp->tcb;
   } else if (so == slirp->udp_last_so) {
       slirp->udp_last_so = &slirp->udb;
+  } else if (so == slirp->icmp_last_so) {
+      slirp->icmp_last_so = &slirp->icmp;
   }
   m_free(so->so_m);
 
@@ -90,8 +93,6 @@ size_t sopreprbuf(struct socket *so, struct iovec *iov, int *np)
        DEBUG_CALL("sopreprbuf");
        DEBUG_ARG("so = %lx", (long )so);
 
-       len = sb->sb_datalen - sb->sb_cc;
-
        if (len <= 0)
                return 0;
 
@@ -166,7 +167,7 @@ soread(struct socket *so)
        nn = readv(so->s, (struct iovec *)iov, n);
        DEBUG_MISC((dfd, " ... read nn = %d bytes\n", nn));
 #else
-       nn = recv(so->s, iov[0].iov_base, iov[0].iov_len,0);
+       nn = qemu_recv(so->s, iov[0].iov_base, iov[0].iov_len,0);
 #endif
        if (nn <= 0) {
                if (nn < 0 && (errno == EINTR || errno == EAGAIN))
@@ -191,7 +192,7 @@ soread(struct socket *so)
         */
        if (n == 2 && nn == iov[0].iov_len) {
             int ret;
-            ret = recv(so->s, iov[1].iov_base, iov[1].iov_len,0);
+            ret = qemu_recv(so->s, iov[1].iov_base, iov[1].iov_len,0);
             if (ret > 0)
                 nn += ret;
         }
@@ -363,8 +364,6 @@ sowrite(struct socket *so)
         * sowrite wouldn't have been called otherwise
         */
 
-        len = sb->sb_cc;
-
        iov[0].iov_base = sb->sb_rptr;
         iov[1].iov_base = NULL;
         iov[1].iov_len = 0;
@@ -584,13 +583,14 @@ sosendto(struct socket *so, struct mbuf *m)
  * Listen for incoming TCP connections
  */
 struct socket *
-tcp_listen(Slirp *slirp, u_int32_t haddr, u_int hport, u_int32_t laddr,
+tcp_listen(Slirp *slirp, uint32_t haddr, u_int hport, uint32_t laddr,
            u_int lport, int flags)
 {
        struct sockaddr_in addr;
        struct socket *so;
        int s, opt = 1;
        socklen_t addrlen = sizeof(addr);
+       memset(&addr, 0, addrlen);
 
        DEBUG_CALL("tcp_listen");
        DEBUG_ARG("haddr = %x", haddr);
@@ -626,8 +626,8 @@ tcp_listen(Slirp *slirp, u_int32_t haddr, u_int hport, u_int32_t laddr,
        addr.sin_addr.s_addr = haddr;
        addr.sin_port = hport;
 
-       if (((s = socket(AF_INET,SOCK_STREAM,0)) < 0) ||
-           (setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int)) < 0) ||
+       if (((s = qemu_socket(AF_INET,SOCK_STREAM,0)) < 0) ||
+           (socket_set_fast_reuse(s) < 0) ||
            (bind(s,(struct sockaddr *)&addr, sizeof(addr)) < 0) ||
            (listen(s,1) < 0)) {
                int tmperrno = errno; /* Don't clobber the real reason we failed */
@@ -642,7 +642,7 @@ tcp_listen(Slirp *slirp, u_int32_t haddr, u_int hport, u_int32_t laddr,
 #endif
                return NULL;
        }
-       setsockopt(s,SOL_SOCKET,SO_OOBINLINE,(char *)&opt,sizeof(int));
+       qemu_setsockopt(s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));
 
        getsockname(s,(struct sockaddr *)&addr,&addrlen);
        so->so_fport = addr.sin_port;
@@ -681,9 +681,6 @@ sofcantrcvmore(struct socket *so)
 {
        if ((so->so_state & SS_NOFDREF) == 0) {
                shutdown(so->s,0);
-               if(global_writefds) {
-                 FD_CLR(so->s,global_writefds);
-               }
        }
        so->so_state &= ~(SS_ISFCONNECTING);
        if (so->so_state & SS_FCANTSENDMORE) {
@@ -699,12 +696,6 @@ sofcantsendmore(struct socket *so)
 {
        if ((so->so_state & SS_NOFDREF) == 0) {
             shutdown(so->s,1);           /* send FIN to fhost */
-            if (global_readfds) {
-                FD_CLR(so->s,global_readfds);
-            }
-            if (global_xfds) {
-                FD_CLR(so->s,global_xfds);
-            }
        }
        so->so_state &= ~(SS_ISFCONNECTING);
        if (so->so_state & SS_FCANTRCVMORE) {