Revision e5d1fca0

b/net/socket.c
266 266
            if (saddr.sin_addr.s_addr == 0) {
267 267
                fprintf(stderr, "qemu: error: init_dgram: fd=%d unbound, "
268 268
                        "cannot setup multicast dst addr\n", fd);
269
                return NULL;
269
                goto err;
270 270
            }
271 271
            /* clone dgram socket */
272 272
            newfd = net_socket_mcast_create(&saddr, NULL);
273 273
            if (newfd < 0) {
274 274
                /* error already reported by net_socket_mcast_create() */
275
                close(fd);
276
                return NULL;
275
                goto err;
277 276
            }
278 277
            /* clone newfd to fd, close newfd */
279 278
            dup2(newfd, fd);
......
283 282
            fprintf(stderr,
284 283
                    "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n",
285 284
                    fd, strerror(errno));
286
            return NULL;
285
            goto err;
287 286
        }
288 287
    }
289 288

  
......
304 303
    if (is_connected) s->dgram_dst=saddr;
305 304

  
306 305
    return s;
306

  
307
err:
308
    closesocket(fd);
309
    return NULL;
307 310
}
308 311

  
309 312
static void net_socket_connect(void *opaque)
......
353 356
        (socklen_t *)&optlen)< 0) {
354 357
        fprintf(stderr, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed\n",
355 358
                fd);
359
        closesocket(fd);
356 360
        return NULL;
357 361
    }
358 362
    switch(so_type) {
......
386 390
        }
387 391
    }
388 392
    s1 = net_socket_fd_init(s->vlan, s->model, s->name, fd, 1);
389
    if (!s1) {
390
        closesocket(fd);
391
    } else {
393
    if (s1) {
392 394
        snprintf(s1->nc.info_str, sizeof(s1->nc.info_str),
393 395
                 "socket: connection from %s:%d",
394 396
                 inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
......
549 551
        }
550 552

  
551 553
        if (!net_socket_fd_init(vlan, "socket", name, fd, 1)) {
552
            close(fd);
553 554
            return -1;
554 555
        }
555 556
    } else if (qemu_opt_get(opts, "listen")) {

Also available in: Unified diff