blob: e663a848909299e38c703e19bce8557a127b0d60 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26package java.net;
27
28import java.io.FileDescriptor;
29import java.io.IOException;
30import java.io.InterruptedIOException;
31
32/**
33 * Abstract datagram and multicast socket implementation base class.
34 * @author Pavani Diwanji
35 * @since JDK1.1
36 */
37
38public abstract class DatagramSocketImpl implements SocketOptions {
39
40 /**
41 * The local port number.
42 */
43 protected int localPort;
44
45 /**
46 * The file descriptor object.
47 */
48 protected FileDescriptor fd;
49
50 /**
51 * Creates a datagram socket.
52 * @exception SocketException if there is an error in the
53 * underlying protocol, such as a TCP error.
54 */
55 protected abstract void create() throws SocketException;
56
57 /**
58 * Binds a datagram socket to a local port and address.
59 * @param lport the local port
60 * @param laddr the local address
61 * @exception SocketException if there is an error in the
62 * underlying protocol, such as a TCP error.
63 */
64 protected abstract void bind(int lport, InetAddress laddr) throws SocketException;
65
66 /**
67 * Sends a datagram packet. The packet contains the data and the
68 * destination address to send the packet to.
69 * @param p the packet to be sent.
70 * @exception IOException if an I/O exception occurs while sending the
71 * datagram packet.
72 * @exception PortUnreachableException may be thrown if the socket is connected
73 * to a currently unreachable destination. Note, there is no guarantee that
74 * the exception will be thrown.
75 */
76 protected abstract void send(DatagramPacket p) throws IOException;
77
78 /**
79 * Connects a datagram socket to a remote destination. This associates the remote
80 * address with the local socket so that datagrams may only be sent to this destination
81 * and received from this destination. This may be overridden to call a native
82 * system connect.
83 *
84 * <p>If the remote destination to which the socket is connected does not
85 * exist, or is otherwise unreachable, and if an ICMP destination unreachable
86 * packet has been received for that address, then a subsequent call to
87 * send or receive may throw a PortUnreachableException.
88 * Note, there is no guarantee that the exception will be thrown.
89 * @param address the remote InetAddress to connect to
90 * @param port the remote port number
91 * @exception SocketException may be thrown if the socket cannot be
92 * connected to the remote destination
93 * @since 1.4
94 */
95 protected void connect(InetAddress address, int port) throws SocketException {}
96
97 /**
98 * Disconnects a datagram socket from its remote destination.
99 * @since 1.4
100 */
101 protected void disconnect() {}
102
103 /**
104 * Peek at the packet to see who it is from. Updates the specified <code>InetAddress</code>
105 * to the address which the packet came from.
106 * @param i an InetAddress object
107 * @return the port number which the packet came from.
108 * @exception IOException if an I/O exception occurs
109 * @exception PortUnreachableException may be thrown if the socket is connected
110 * to a currently unreachable destination. Note, there is no guarantee that the
111 * exception will be thrown.
112 */
113 protected abstract int peek(InetAddress i) throws IOException;
114
115 /**
116 * Peek at the packet to see who it is from. The data is copied into the specified
117 * <code>DatagramPacket</code>. The data is returned,
118 * but not consumed, so that a subsequent peekData/receive operation
119 * will see the same data.
120 * @param p the Packet Received.
121 * @return the port number which the packet came from.
122 * @exception IOException if an I/O exception occurs
123 * @exception PortUnreachableException may be thrown if the socket is connected
124 * to a currently unreachable destination. Note, there is no guarantee that the
125 * exception will be thrown.
126 * @since 1.4
127 */
128 protected abstract int peekData(DatagramPacket p) throws IOException;
129 /**
130 * Receive the datagram packet.
131 * @param p the Packet Received.
132 * @exception IOException if an I/O exception occurs
133 * while receiving the datagram packet.
134 * @exception PortUnreachableException may be thrown if the socket is connected
135 * to a currently unreachable destination. Note, there is no guarantee that the
136 * exception will be thrown.
137 */
138 protected abstract void receive(DatagramPacket p) throws IOException;
139
140 /**
141 * Set the TTL (time-to-live) option.
142 * @param ttl a byte specifying the TTL value
143 *
144 * @deprecated use setTimeToLive instead.
145 * @exception IOException if an I/O exception occurs while setting
146 * the time-to-live option.
147 * @see #getTTL()
148 */
149 @Deprecated
150 protected abstract void setTTL(byte ttl) throws IOException;
151
152 /**
153 * Retrieve the TTL (time-to-live) option.
154 *
155 * @exception IOException if an I/O exception occurs
156 * while retrieving the time-to-live option
157 * @deprecated use getTimeToLive instead.
158 * @return a byte representing the TTL value
159 * @see #setTTL(byte)
160 */
161 @Deprecated
162 protected abstract byte getTTL() throws IOException;
163
164 /**
165 * Set the TTL (time-to-live) option.
166 * @param ttl an <tt>int</tt> specifying the time-to-live value
167 * @exception IOException if an I/O exception occurs
168 * while setting the time-to-live option.
169 * @see #getTimeToLive()
170 */
171 protected abstract void setTimeToLive(int ttl) throws IOException;
172
173 /**
174 * Retrieve the TTL (time-to-live) option.
175 * @exception IOException if an I/O exception occurs
176 * while retrieving the time-to-live option
177 * @return an <tt>int</tt> representing the time-to-live value
178 * @see #setTimeToLive(int)
179 */
180 protected abstract int getTimeToLive() throws IOException;
181
182 /**
183 * Join the multicast group.
184 * @param inetaddr multicast address to join.
185 * @exception IOException if an I/O exception occurs
186 * while joining the multicast group.
187 */
188 protected abstract void join(InetAddress inetaddr) throws IOException;
189
190 /**
191 * Leave the multicast group.
192 * @param inetaddr multicast address to leave.
193 * @exception IOException if an I/O exception occurs
194 * while leaving the multicast group.
195 */
196 protected abstract void leave(InetAddress inetaddr) throws IOException;
197
198 /**
199 * Join the multicast group.
200 * @param mcastaddr address to join.
201 * @param netIf specifies the local interface to receive multicast
202 * datagram packets
203 * @throws IOException if an I/O exception occurs while joining
204 * the multicast group
205 * @since 1.4
206 */
207 protected abstract void joinGroup(SocketAddress mcastaddr,
208 NetworkInterface netIf)
209 throws IOException;
210
211 /**
212 * Leave the multicast group.
213 * @param mcastaddr address to leave.
214 * @param netIf specified the local interface to leave the group at
215 * @throws IOException if an I/O exception occurs while leaving
216 * the multicast group
217 * @since 1.4
218 */
219 protected abstract void leaveGroup(SocketAddress mcastaddr,
220 NetworkInterface netIf)
221 throws IOException;
222
223 /**
224 * Close the socket.
225 */
226 protected abstract void close();
227
228 /**
229 * Gets the local port.
230 * @return an <tt>int</tt> representing the local port value
231 */
232 protected int getLocalPort() {
233 return localPort;
234 }
235
236 /**
237 * Gets the datagram socket file descriptor.
238 * @return a <tt>FileDescriptor</tt> object representing the datagram socket
239 * file descriptor
240 */
241 protected FileDescriptor getFileDescriptor() {
242 return fd;
243 }
244}