1. /*
  2. * Copyright 2001-2004 The Apache Software Foundation
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.apache.commons.net.io;
  17. import java.io.FilterInputStream;
  18. import java.io.IOException;
  19. import java.io.InputStream;
  20. import java.net.Socket;
  21. /***
  22. * This class wraps an input stream, storing a reference to its originating
  23. * socket. When the stream is closed, it will also close the socket
  24. * immediately afterward. This class is useful for situations where you
  25. * are dealing with a stream originating from a socket, but do not have
  26. * a reference to the socket, and want to make sure it closes when the
  27. * stream closes.
  28. * <p>
  29. * <p>
  30. * @author Daniel F. Savarese
  31. * @see SocketOutputStream
  32. ***/
  33. public class SocketInputStream extends FilterInputStream
  34. {
  35. private Socket __socket;
  36. /***
  37. * Creates a SocketInputStream instance wrapping an input stream and
  38. * storing a reference to a socket that should be closed on closing
  39. * the stream.
  40. * <p>
  41. * @param socket The socket to close on closing the stream.
  42. * @param stream The input stream to wrap.
  43. ***/
  44. public SocketInputStream(Socket socket, InputStream stream)
  45. {
  46. super(stream);
  47. __socket = socket;
  48. }
  49. /***
  50. * Closes the stream and immediately afterward closes the referenced
  51. * socket.
  52. * <p>
  53. * @exception IOException If there is an error in closing the stream
  54. * or socket.
  55. ***/
  56. public void close() throws IOException
  57. {
  58. super.close();
  59. __socket.close();
  60. }
  61. }