1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.newsclub.net.unix.darwin.system;
19
20 import java.io.FileDescriptor;
21 import java.io.IOException;
22 import java.net.Socket;
23 import java.net.SocketException;
24
25 import org.newsclub.net.unix.AFSYSTEMSocketAddress;
26 import org.newsclub.net.unix.AFSYSTEMSocketImplExtensions;
27 import org.newsclub.net.unix.AFSocket;
28 import org.newsclub.net.unix.AFSocketCapability;
29 import org.newsclub.net.unix.AFSocketFactory;
30
31 import com.kohlschutter.annotations.compiletime.SuppressFBWarnings;
32
33
34
35
36
37
38 public final class AFSYSTEMSocket extends AFSocket<AFSYSTEMSocketAddress> implements
39 AFSYSTEMSocketExtensions {
40 private static AFSYSTEMSocketImplExtensions staticExtensions = null;
41
42 AFSYSTEMSocket(FileDescriptor fdObj, AFSocketFactory<AFSYSTEMSocketAddress> factory)
43 throws SocketException {
44 super(new AFSYSTEMSocketImpl(fdObj), factory);
45 }
46
47 @SuppressWarnings("unused")
48 private static synchronized AFSYSTEMSocketImplExtensions getStaticImplExtensions()
49 throws IOException {
50 if (staticExtensions == null) {
51 try (AFSYSTEMSocket socket = new AFSYSTEMSocket(null, null)) {
52 staticExtensions = (AFSYSTEMSocketImplExtensions) socket.getImplExtensions();
53 }
54 }
55 return staticExtensions;
56 }
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 @SuppressFBWarnings("HSM_HIDING_METHOD")
72 public static boolean isSupported() {
73 return AFSocket.isSupported() && AFSocket.supports(AFSocketCapability.CAPABILITY_DARWIN);
74 }
75
76 @Override
77 protected AFSYSTEMSocketChannel newChannel() {
78 return new AFSYSTEMSocketChannel(this);
79 }
80
81
82
83
84
85
86
87
88
89
90
91
92 public static AFSYSTEMSocket newInstance() throws IOException {
93 return (AFSYSTEMSocket) AFSocket.newInstance(AFSYSTEMSocket::new, (AFSYSTEMSocketFactory) null);
94 }
95
96 static AFSYSTEMSocket newInstance(AFSYSTEMSocketFactory factory) throws SocketException {
97 return (AFSYSTEMSocket) AFSocket.newInstance(AFSYSTEMSocket::new, factory);
98 }
99
100
101
102
103
104
105
106
107
108
109 public static AFSYSTEMSocket newStrictInstance() throws IOException {
110 return (AFSYSTEMSocket) AFSocket.newInstance(AFSYSTEMSocket::new, (AFSYSTEMSocketFactory) null);
111 }
112
113
114
115
116
117
118
119
120 public static AFSYSTEMSocket connectTo(AFSYSTEMSocketAddress addr) throws IOException {
121 return (AFSYSTEMSocket) AFSocket.connectTo(AFSYSTEMSocket::new, addr);
122 }
123
124 @Override
125 public AFSYSTEMSocketChannel getChannel() {
126 return (AFSYSTEMSocketChannel) super.getChannel();
127 }
128
129
130
131
132
133
134
135
136 public static void main(String[] args) {
137 System.out.print(AFSYSTEMSocket.class.getName() + ".isSupported(): ");
138 System.out.flush();
139 System.out.println(AFSYSTEMSocket.isSupported());
140 }
141 }