|
|
@@ -808,6 +808,24 @@ func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {
|
|
|
return &value, err
|
|
|
}
|
|
|
|
|
|
+// GetsockoptString returns the string value of the socket option opt for the
|
|
|
+// socket associated with fd at the given socket level.
|
|
|
+func GetsockoptString(fd, level, opt int) (string, error) {
|
|
|
+ buf := make([]byte, 256)
|
|
|
+ vallen := _Socklen(len(buf))
|
|
|
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
|
|
|
+ if err != nil {
|
|
|
+ if err == ERANGE {
|
|
|
+ buf = make([]byte, vallen)
|
|
|
+ err = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ return "", err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return string(buf[:vallen-1]), nil
|
|
|
+}
|
|
|
+
|
|
|
func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
|
|
|
return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
|
|
|
}
|