You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.1 KiB
41 lines
1.1 KiB
6 years ago
|
package rpc
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"net"
|
||
|
|
||
|
"github.com/ethereum/go-ethereum/log"
|
||
|
"github.com/ethereum/go-ethereum/p2p/netutil"
|
||
|
)
|
||
|
|
||
|
// ServeListener accepts connections on l, serving JSON-RPC on them.
|
||
|
func (s *Server) ServeListener(l net.Listener) error {
|
||
|
for {
|
||
|
conn, err := l.Accept()
|
||
|
if netutil.IsTemporaryError(err) {
|
||
|
log.Warn("RPC accept error", "err", err)
|
||
|
continue
|
||
|
} else if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
log.Trace("Accepted RPC connection", "conn", conn.RemoteAddr())
|
||
|
go s.ServeCodec(NewJSONCodec(conn))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// DialIPC create a new IPC client that connects to the given endpoint. On Unix it assumes
|
||
|
// the endpoint is the full path to a unix socket, and Windows the endpoint is an
|
||
|
// identifier for a named pipe.
|
||
|
//
|
||
|
// The context is used for the initial connection establishment. It does not
|
||
|
// affect subsequent interactions with the client.
|
||
|
func DialIPC(ctx context.Context, endpoint string) (*Client, error) {
|
||
|
return newClient(ctx, func(ctx context.Context) (ServerCodec, error) {
|
||
|
conn, err := newIPCConnection(ctx, endpoint)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return NewJSONCodec(conn), err
|
||
|
})
|
||
|
}
|