github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/cloud/pkg/csidriver/uds.go (about) 1 /* 2 Copyright 2019 The KubeEdge Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package csidriver 18 19 import ( 20 "net" 21 22 "k8s.io/klog" 23 ) 24 25 const ( 26 // DefaultBufferSize represents default buffer size 27 DefaultBufferSize = 10480 28 ) 29 30 // UnixDomainSocket struct 31 type UnixDomainSocket struct { 32 filename string 33 buffersize int 34 } 35 36 // NewUnixDomainSocket create new socket 37 func NewUnixDomainSocket(filename string, buffersize ...int) *UnixDomainSocket { 38 size := DefaultBufferSize 39 if buffersize != nil { 40 size = buffersize[0] 41 } 42 us := UnixDomainSocket{filename: filename, buffersize: size} 43 return &us 44 } 45 46 // Connect for client 47 func (us *UnixDomainSocket) Connect() (net.Conn, error) { 48 // parse 49 proto, addr, err := parseEndpoint(us.filename) 50 if err != nil { 51 klog.Errorf("failed to parseEndpoint: %v", err) 52 return nil, err 53 } 54 55 // dial 56 c, err := net.Dial(proto, addr) 57 if err != nil { 58 klog.Errorf("failed to dial: %v", err) 59 return nil, err 60 } 61 return c, nil 62 } 63 64 // Send msg for client 65 func (us *UnixDomainSocket) Send(c net.Conn, context string) (string, error) { 66 // send msg 67 _, err := c.Write([]byte(context)) 68 if err != nil { 69 klog.Errorf("failed to write buffer: %v", err) 70 return "", err 71 } 72 73 // read response 74 buf := make([]byte, us.buffersize) 75 nr, err := c.Read(buf) 76 if err != nil { 77 klog.Errorf("failed to read buffer: %v", err) 78 return "", err 79 } 80 return string(buf[0:nr]), nil 81 }