--- ebusd/src/ebusd.c	2013-11-07 23:13:21.000000000 +0100
+++ ebusd.1993.mod/src/ebusd.c	2013-11-07 23:05:48.000000000 +0100
@@ -495,6 +495,7 @@
 						log_print(L_ERR, "can't close port: %d", port);
 					else
 						log_print(L_INF, "port %d closed", port);
+					FD_CLR(socketfd, &listenfds);
 				}
 				
 				/* close serial device */
@@ -502,7 +503,7 @@
 					log_print(L_ERR, "can't close device: %s", device);
 				else
 					log_print(L_INF, "%s closed", device);
-
+				FD_CLR(serialfd, &listenfds);
 			}
 
 			/* need sleep to prevent high cpu consumption */
@@ -518,6 +519,9 @@
 			if (sfd_closed == NO && sock_open(&socketfd, port, localhost) == 0)
 				log_print(L_INF, "port %d opened", port);
 
+			FD_SET(serialfd, &listenfds);
+			FD_SET(socketfd, &listenfds);
+
 			continue;
 		}
 
@@ -585,6 +589,10 @@
 		/* run through connected sockets for new data */
 		for (readfd = socketfd + 1; readfd <= maxfd; ++readfd) {
 
+			/* skip serial socket */
+			if (readfd==serialfd) continue;
+
+
 			/* check all connected clients */
 			if (FD_ISSET(readfd, &readfds)) {
 				char tcpbuf[SOCKET_BUFSIZE];
