diff --git a/exec/irc.js b/exec/irc.js
index 063ade99cbb618cc85133bdefabe1ed2b696a501..66a4b3f54515ba9bd61bcc5f2177d865c333b9b6 100644
--- a/exec/irc.js
+++ b/exec/irc.js
@@ -111,6 +111,9 @@ while(!connected)  {
 }
 
 // Main loop
+socks = new Array;
+socks.push(sock);
+socks.push(client.socket);
 while(!quit)  {
 	if(!sock.is_connected || !connected)  {
 		alert("Lost connection");
@@ -126,8 +129,15 @@ while(!quit)  {
 		clean_exit();
 	}
 
-	screen.update();
-	recieve_command();
+	ready=socket_select(socks, 1);
+	for(thissock in ready) {
+		if(ready[thissock]==0) {	// IRC server
+			recieve_command();
+		}
+		if(ready[thissock]==1) {	// Client
+			screen.update();
+		}
+	}
 }
 sock.close();
 clean_exit();
@@ -1242,12 +1252,12 @@ function Screen_update_input_line()  {
 }
 
 function Screen_update()  {
-	var key=console.inkey();
-	if(key!="")  {
-		this.handle_key(key);
-	}
-	else {
-		sleep(1);
+	while(1) {
+		var key=console.inkey();
+		if(key!="")
+			this.handle_key(key);
+		else
+			break;
 	}
 }