diff --git a/rpc/constants_unix.go b/rpc/constants_unix.go
new file mode 100644
index 0000000000..1f04d15d7f
--- /dev/null
+++ b/rpc/constants_unix.go
@@ -0,0 +1,34 @@
+// Copyright 2019 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see .
+
+//go:build darwin || dragonfly || freebsd || linux || nacl || netbsd || openbsd || solaris
+// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+
+package rpc
+
+/*
+#include
+
+int max_socket_path_size() {
+struct sockaddr_un s;
+return sizeof(s.sun_path);
+}
+*/
+import "C"
+
+var (
+ max_path_size = C.max_socket_path_size()
+)
diff --git a/rpc/constants_unix_nocgo.go b/rpc/constants_unix_nocgo.go
new file mode 100644
index 0000000000..a62e4ee529
--- /dev/null
+++ b/rpc/constants_unix_nocgo.go
@@ -0,0 +1,26 @@
+// Copyright 2019 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see .
+
+//go:build !cgo && !windows
+// +build !cgo,!windows
+
+package rpc
+
+var (
+ // On Linux, sun_path is 108 bytes in size
+ // see http://man7.org/linux/man-pages/man7/unix.7.html
+ max_path_size = 108
+)
diff --git a/rpc/ipc_unix.go b/rpc/ipc_unix.go
index 33c1cad549..9876347708 100644
--- a/rpc/ipc_unix.go
+++ b/rpc/ipc_unix.go
@@ -29,17 +29,11 @@ import (
"github.com/ethereum/go-ethereum/log"
)
-const (
- // On Linux, sun_path is 108 bytes in size
- // see http://man7.org/linux/man-pages/man7/unix.7.html
- maxPathSize = int(108)
-)
-
// ipcListen will create a Unix socket on the given endpoint.
func ipcListen(endpoint string) (net.Listener, error) {
// account for null-terminator too
- if len(endpoint)+1 > maxPathSize {
- log.Warn(fmt.Sprintf("The ipc endpoint is longer than %d characters. ", maxPathSize-1),
+ if len(endpoint)+1 > int(max_path_size) {
+ log.Warn(fmt.Sprintf("The ipc endpoint is longer than %d characters. ", max_path_size-1),
"endpoint", endpoint)
}