Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 15 additions & 9 deletions src/main/java/org/scalasbt/ipcsocket/UnixDomainSocketLibrary.java
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,16 @@ public static class SunFamily extends Union {
public SunFamily sunFamily = new SunFamily();
public byte[] sunPath = new byte[104];

static synchronized SockaddrUn of() {
return new SockaddrUn();
}

static synchronized SockaddrUn of(String path) throws IOException {
return new SockaddrUn(path);
}

/** Constructs an empty {@code struct sockaddr_un}. */
public SockaddrUn() {
private SockaddrUn() {
if (HAS_SUN_LEN) {
sunFamily.sunLenAndFamily = new SunLenAndFamily();
sunFamily.setType(SunLenAndFamily.class);
Expand All @@ -105,7 +113,7 @@ public SockaddrUn() {
* Constructs a {@code struct sockaddr_un} with a path whose bytes are encoded using the default
* encoding of the platform.
*/
public SockaddrUn(String path) throws IOException {
private SockaddrUn(String path) throws IOException {
byte[] pathBytes = path.getBytes();
if (pathBytes.length > sunPath.length - 1) {
throw new IOException(
Expand Down Expand Up @@ -200,7 +208,7 @@ public int socket(int domain, int type, int protocol) throws NativeErrorExceptio
public int bind(int fd, byte[] address, int addressLen) throws NativeErrorException {
try {
final UnixDomainSocketLibrary.SockaddrUn sockaddrUn =
new UnixDomainSocketLibrary.SockaddrUn(new String(address));
UnixDomainSocketLibrary.SockaddrUn.of(new String(address));
return UnixDomainSocketLibrary.bind(fd, sockaddrUn, sockaddrUn.size());
} catch (final LastErrorException e) {
throw new NativeErrorException(e.getErrorCode(), e.getMessage());
Expand All @@ -212,8 +220,7 @@ public int bind(int fd, byte[] address, int addressLen) throws NativeErrorExcept
@Override
public int listen(int fd, int backlog) throws NativeErrorException {
try {
final UnixDomainSocketLibrary.SockaddrUn sockaddrUn =
new UnixDomainSocketLibrary.SockaddrUn();
final UnixDomainSocketLibrary.SockaddrUn sockaddrUn = UnixDomainSocketLibrary.SockaddrUn.of();
return UnixDomainSocketLibrary.listen(fd, backlog);
} catch (final LastErrorException e) {
throw new NativeErrorException(e.getErrorCode(), e.getMessage());
Expand All @@ -223,8 +230,7 @@ public int listen(int fd, int backlog) throws NativeErrorException {
@Override
public int accept(int fd) throws NativeErrorException {
try {
final UnixDomainSocketLibrary.SockaddrUn sockaddrUn =
new UnixDomainSocketLibrary.SockaddrUn();
final UnixDomainSocketLibrary.SockaddrUn sockaddrUn = UnixDomainSocketLibrary.SockaddrUn.of();
IntByReference addressLen = new IntByReference();
addressLen.setValue(sockaddrUn.size());
return UnixDomainSocketLibrary.accept(fd, sockaddrUn, addressLen);
Expand All @@ -237,7 +243,7 @@ public int accept(int fd) throws NativeErrorException {
public int connect(int fd, byte[] address, int len) throws NativeErrorException {
try {
final UnixDomainSocketLibrary.SockaddrUn sockaddrUn =
new UnixDomainSocketLibrary.SockaddrUn(new String(address));
UnixDomainSocketLibrary.SockaddrUn.of(new String(address));
return UnixDomainSocketLibrary.connect(fd, sockaddrUn, sockaddrUn.size());
} catch (final LastErrorException e) {
throw new NativeErrorException(e.getErrorCode(), e.getMessage());
Expand Down Expand Up @@ -336,6 +342,6 @@ public int shutdown(int fd, int how) throws NativeErrorException {

@Override
public int maxSocketLength() {
return new UnixDomainSocketLibrary.SockaddrUn().sunPath.length;
return UnixDomainSocketLibrary.SockaddrUn.of().sunPath.length;
}
}