github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/rpc/ipc.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:42</date> 10 //</624450108938784768> 11 12 13 package rpc 14 15 import ( 16 "context" 17 "net" 18 19 "github.com/ethereum/go-ethereum/log" 20 "github.com/ethereum/go-ethereum/p2p/netutil" 21 ) 22 23 //servelistener接受L上的连接,并为它们提供JSON-RPC。 24 func (srv *Server) ServeListener(l net.Listener) error { 25 for { 26 conn, err := l.Accept() 27 if netutil.IsTemporaryError(err) { 28 log.Warn("IPC accept error", "err", err) 29 continue 30 } else if err != nil { 31 return err 32 } 33 log.Trace("IPC accepted connection") 34 go srv.ServeCodec(NewJSONCodec(conn), OptionMethodInvocation|OptionSubscriptions) 35 } 36 } 37 38 //DialIPC创建一个新的连接到给定端点的IPC客户端。在Unix上,它假定 39 //端点是指向Unix套接字的完整路径,而Windows端点是 40 //命名管道的标识符。 41 // 42 //上下文用于建立初始连接。它不 43 //影响与客户的后续交互。 44 func DialIPC(ctx context.Context, endpoint string) (*Client, error) { 45 return newClient(ctx, func(ctx context.Context) (net.Conn, error) { 46 return newIPCConnection(ctx, endpoint) 47 }) 48 } 49