Commit 7b91a17212a0a16dd56a8731c345ecf29c366855

Authored by bellard
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,7 +320,7 @@ fork_exec(so, ex, do_pty)
320 /* don't want to clobber the original */ 320 /* don't want to clobber the original */
321 char *bptr; 321 char *bptr;
322 char *curarg; 322 char *curarg;
323 - int c, i; 323 + int c, i, ret;
324 324
325 DEBUG_CALL("fork_exec"); 325 DEBUG_CALL("fork_exec");
326 DEBUG_ARG("so = %lx", (long)so); 326 DEBUG_ARG("so = %lx", (long)so);
@@ -372,7 +372,9 @@ fork_exec(so, ex, do_pty) @@ -372,7 +372,9 @@ fork_exec(so, ex, do_pty)
372 */ 372 */
373 s = socket(AF_INET, SOCK_STREAM, 0); 373 s = socket(AF_INET, SOCK_STREAM, 0);
374 addr.sin_addr = loopback_addr; 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 #if 0 380 #if 0
@@ -436,8 +438,10 @@ fork_exec(so, ex, do_pty) @@ -436,8 +438,10 @@ fork_exec(so, ex, do_pty)
436 * The only reason this will block forever is if socket() 438 * The only reason this will block forever is if socket()
437 * of connect() fail in the child process 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 opt = 1; 445 opt = 1;
442 setsockopt(so->s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int)); 446 setsockopt(so->s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int));
443 opt = 1; 447 opt = 1;