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
diff --git a/slirp/misc.c b/slirp/misc.c
index 5b809a8..a58b631 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -320,7 +320,7 @@
 	/* don't want to clobber the original */
 	char *bptr;
 	char *curarg;
-	int c, i;
+	int c, i, ret;
 	
 	DEBUG_CALL("fork_exec");
 	DEBUG_ARG("so = %lx", (long)so);
@@ -372,7 +372,9 @@
 	 		 */
 			s = socket(AF_INET, SOCK_STREAM, 0);
 			addr.sin_addr = loopback_addr;
-			connect(s, (struct sockaddr *)&addr, addrlen);
+                        do {
+                            ret = connect(s, (struct sockaddr *)&addr, addrlen);
+                        } while (ret < 0 && errno == EINTR);
 		}
 		
 #if 0
@@ -436,8 +438,10 @@
 		 	 * The only reason this will block forever is if socket()
 		 	 * of connect() fail in the child process
 		 	 */
-			so->s = accept(s, (struct sockaddr *)&addr, &addrlen);
-			closesocket(s);
+                        do {
+                            so->s = accept(s, (struct sockaddr *)&addr, &addrlen);
+                        } while (so->s < 0 && errno == EINTR);
+                        closesocket(s);
 			opt = 1;
 			setsockopt(so->s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int));
 			opt = 1;