From 46a83324ab63b67fa3f85fcefa705aef9ab1b77b Mon Sep 17 00:00:00 2001
From: Michael Nutt <michael@nuttnet.net>
Date: Thu, 16 Sep 2010 02:34:11 -0400
Subject: [PATCH] Warn if can't attach to websocket port

---
 config/initializers/socket.rb | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/config/initializers/socket.rb b/config/initializers/socket.rb
index 1fd09fd93b..a806e25535 100644
--- a/config/initializers/socket.rb
+++ b/config/initializers/socket.rb
@@ -9,18 +9,26 @@ require "lib/diaspora/websocket"
   EM.next_tick {
     Diaspora::WebSocket.initialize_channels
 
-    EventMachine::WebSocket.start(
-                  :host => "0.0.0.0",
-                  :port => APP_CONFIG[:socket_port],
-                  :debug =>APP_CONFIG[:socket_debug]) do |ws|
-      ws.onopen {
+    begin
+      EventMachine::WebSocket.start(
+                    :host => "0.0.0.0",
+                    :port => APP_CONFIG[:socket_port],
+                    :debug =>APP_CONFIG[:socket_debug]) do |ws|
+        ws.onopen {
 
-        sid = Diaspora::WebSocket.subscribe(ws.request['Path'].gsub('/',''), ws)
+          sid = Diaspora::WebSocket.subscribe(ws.request['Path'].gsub('/',''), ws)
 
-        ws.onmessage { |msg| SocketsController.new.incoming(msg) }
+          ws.onmessage { |msg| SocketsController.new.incoming(msg) }
 
-        ws.onclose { Diaspora::WebSocket.unsubscribe(ws.request['Path'].gsub('/',''), sid) }
-      }
+          ws.onclose { Diaspora::WebSocket.unsubscribe(ws.request['Path'].gsub('/',''), sid) }
+        }
+      end
+    rescue RuntimeError => e
+      if e.message =~ /no acceptor/
+        raise RuntimeError, "Could not listen on port #{APP_CONFIG[:socket_port]}, perhaps another process is already using it?"
+      else
+        raise
+      end
     end
   }
 
-- 
GitLab