|
|
@@ -20,13 +20,31 @@ package rpc
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
+ "fmt"
|
|
|
"net"
|
|
|
"os"
|
|
|
"path/filepath"
|
|
|
+
|
|
|
+ "github.com/ethereum/go-ethereum/log"
|
|
|
)
|
|
|
|
|
|
+/*
|
|
|
+#include <sys/un.h>
|
|
|
+
|
|
|
+int max_socket_path_size() {
|
|
|
+struct sockaddr_un s;
|
|
|
+return sizeof(s.sun_path);
|
|
|
+}
|
|
|
+*/
|
|
|
+import "C"
|
|
|
+
|
|
|
// ipcListen will create a Unix socket on the given endpoint.
|
|
|
func ipcListen(endpoint string) (net.Listener, error) {
|
|
|
+ if len(endpoint) > int(C.max_socket_path_size()) {
|
|
|
+ log.Warn(fmt.Sprintf("The ipc endpoint is longer than %d characters. ", C.max_socket_path_size()),
|
|
|
+ "endpoint", endpoint)
|
|
|
+ }
|
|
|
+
|
|
|
// Ensure the IPC path exists and remove any previous leftover
|
|
|
if err := os.MkdirAll(filepath.Dir(endpoint), 0751); err != nil {
|
|
|
return nil, err
|