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