Set timeout of 3 minutes for the socket.
[xudocci.git] / src / main / java / net / pterodactylus / irc / Connection.java
index b1ca64a..f3f41f0 100644 (file)
@@ -35,6 +35,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.net.SocketFactory;
@@ -59,6 +60,7 @@ import net.pterodactylus.irc.event.NicknameInUseReceived;
 import net.pterodactylus.irc.event.NoNicknameGivenReceived;
 import net.pterodactylus.irc.event.PrivateMessageReceived;
 import net.pterodactylus.irc.event.PrivateNoticeReceived;
+import net.pterodactylus.irc.event.ReplyReceived;
 import net.pterodactylus.irc.event.UnknownReplyReceived;
 import net.pterodactylus.irc.util.RandomNickname;
 import net.pterodactylus.xdcc.util.io.BandwidthCountingInputStream;
@@ -324,7 +326,9 @@ public class Connection extends AbstractExecutionThreadService implements Servic
         *              if an I/O error occurs
         */
        public void close() throws IOException {
-               connectionHandler.close();
+               if (connectionHandler != null) {
+                       connectionHandler.close();
+               }
        }
 
        //
@@ -343,6 +347,7 @@ public class Connection extends AbstractExecutionThreadService implements Servic
                /* connect to remote socket. */
                try {
                        Socket socket = socketFactory.createSocket(hostname, port);
+                       socket.setSoTimeout((int) TimeUnit.MINUTES.toMillis(3));
                        connectionHandler = new ConnectionHandler(socket.getInputStream(), socket.getOutputStream());
 
                        /* register connection. */
@@ -373,6 +378,7 @@ public class Connection extends AbstractExecutionThreadService implements Servic
 
                        while (connected) {
                                Reply reply = connectionHandler.readReply();
+                               eventBus.post(new ReplyReceived(this, reply));
                                logger.finest(String.format("<< %s", reply));
                                String command = reply.command();
                                List<String> parameters = reply.parameters();