1
1
package com .timgroup .statsd ;
2
2
3
- import java .net .DatagramPacket ;
4
- import java .net .DatagramSocket ;
5
3
import java .net .InetSocketAddress ;
4
+ import java .nio .ByteBuffer ;
5
+ import java .nio .channels .DatagramChannel ;
6
6
import java .nio .charset .Charset ;
7
+ import java .text .NumberFormat ;
7
8
import java .util .Locale ;
8
9
import java .util .concurrent .ExecutorService ;
9
10
import java .util .concurrent .Executors ;
10
11
import java .util .concurrent .ThreadFactory ;
11
12
import java .util .concurrent .TimeUnit ;
12
- import java .text .NumberFormat ;
13
13
14
14
/**
15
15
* A simple StatsD client implementation facilitating metrics recording.
@@ -46,7 +46,7 @@ public final class NonBlockingStatsDClient extends ConvenienceMethodProvidingSta
46
46
};
47
47
48
48
private final String prefix ;
49
- private final DatagramSocket clientSocket ;
49
+ private final DatagramChannel clientSocket ;
50
50
private final StatsDClientErrorHandler handler ;
51
51
52
52
private final ExecutorService executor = Executors .newSingleThreadExecutor (new ThreadFactory () {
@@ -109,7 +109,7 @@ public NonBlockingStatsDClient(String prefix, String hostname, int port, StatsDC
109
109
this .handler = errorHandler ;
110
110
111
111
try {
112
- this .clientSocket = new DatagramSocket ();
112
+ this .clientSocket = DatagramChannel . open ();
113
113
this .clientSocket .connect (new InetSocketAddress (hostname , port ));
114
114
} catch (Exception e ) {
115
115
throw new StatsDClientException ("Failed to start StatsD client" , e );
@@ -131,7 +131,12 @@ public void stop() {
131
131
}
132
132
finally {
133
133
if (clientSocket != null ) {
134
- clientSocket .close ();
134
+ try {
135
+ clientSocket .close ();
136
+ }
137
+ catch (Exception e ) {
138
+ handler .handle (e );
139
+ }
135
140
}
136
141
}
137
142
}
@@ -249,8 +254,7 @@ private void send(final String message) {
249
254
private void blockingSend (String message ) {
250
255
try {
251
256
final byte [] sendData = message .getBytes (STATS_D_ENCODING );
252
- final DatagramPacket sendPacket = new DatagramPacket (sendData , sendData .length );
253
- clientSocket .send (sendPacket );
257
+ clientSocket .write (ByteBuffer .wrap (sendData ));
254
258
} catch (Exception e ) {
255
259
handler .handle (e );
256
260
}
0 commit comments