/* * Copyright (c) 2009, 2012 IBM Corp. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Dave Locke - initial API and implementation and/or initial documentation */ package org.eclipse.paho.client.mqttv3.internal; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ConnectException; import java.net.Socket; import javax.net.SocketFactory; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.internal.trace.Trace; /** * A network module for connecting over TCP. */ public class TCPNetworkModule implements NetworkModule { protected Socket socket; private SocketFactory factory; private String host; private int port; protected Trace trace; /** * Constructs a new TCPNetworkModule using the specified host and * port. The supplied SocketFactory is used to supply the network * socket. */ public TCPNetworkModule(Trace trace, SocketFactory factory, String host, int port) { this.factory = factory; this.host = host; this.port = port; this.trace = trace; } /** * Starts the module, by creating a TCP socket to the server. */ public void start() throws IOException, MqttException { try { // InetAddress localAddr = InetAddress.getLocalHost(); // socket = factory.createSocket(host, port, localAddr, 0); socket = factory.createSocket(host, port); // SetTcpNoDelay was originally set ot true disabling Nagle's algorithm. // This should not be required. // socket.setTcpNoDelay(true); // TCP_NODELAY on, which means we do not use Nagle's algorithm } catch (ConnectException ex) { //@TRACE 250=Failed to create TCP socket trace.trace(Trace.FINE,250,null,ex); throw ExceptionHelper.createMqttException(MqttException.REASON_CODE_SERVER_CONNECT_ERROR); } } public InputStream getInputStream() throws IOException { return socket.getInputStream(); } public OutputStream getOutputStream() throws IOException { return socket.getOutputStream(); } /** * Stops the module, by closing the TCP socket. */ public void stop() throws IOException { if (socket != null) { socket.close(); } } }