Commit 7b91a17212a0a16dd56a8731c345ecf29c366855
1 parent
585d0ed9
slirp fix for -smb command (Initial patch by Juergen Keil)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1172 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
8 additions
and
4 deletions
slirp/misc.c
| ... | ... | @@ -320,7 +320,7 @@ fork_exec(so, ex, do_pty) |
| 320 | 320 | /* don't want to clobber the original */ |
| 321 | 321 | char *bptr; |
| 322 | 322 | char *curarg; |
| 323 | - int c, i; | |
| 323 | + int c, i, ret; | |
| 324 | 324 | |
| 325 | 325 | DEBUG_CALL("fork_exec"); |
| 326 | 326 | DEBUG_ARG("so = %lx", (long)so); |
| ... | ... | @@ -372,7 +372,9 @@ fork_exec(so, ex, do_pty) |
| 372 | 372 | */ |
| 373 | 373 | s = socket(AF_INET, SOCK_STREAM, 0); |
| 374 | 374 | addr.sin_addr = loopback_addr; |
| 375 | - connect(s, (struct sockaddr *)&addr, addrlen); | |
| 375 | + do { | |
| 376 | + ret = connect(s, (struct sockaddr *)&addr, addrlen); | |
| 377 | + } while (ret < 0 && errno == EINTR); | |
| 376 | 378 | } |
| 377 | 379 | |
| 378 | 380 | #if 0 |
| ... | ... | @@ -436,8 +438,10 @@ fork_exec(so, ex, do_pty) |
| 436 | 438 | * The only reason this will block forever is if socket() |
| 437 | 439 | * of connect() fail in the child process |
| 438 | 440 | */ |
| 439 | - so->s = accept(s, (struct sockaddr *)&addr, &addrlen); | |
| 440 | - closesocket(s); | |
| 441 | + do { | |
| 442 | + so->s = accept(s, (struct sockaddr *)&addr, &addrlen); | |
| 443 | + } while (so->s < 0 && errno == EINTR); | |
| 444 | + closesocket(s); | |
| 441 | 445 | opt = 1; |
| 442 | 446 | setsockopt(so->s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int)); |
| 443 | 447 | opt = 1; | ... | ... |