code: func SocketGet(local, remote net.Addr) (*Socket, error) {
  	localTCP, ok := local.(*net.TCPAddr)
  	if !ok {
  		return nil, ErrNotImplemented
  	}
  	remoteTCP, ok := remote.(*net.TCPAddr)
  	if !ok {
  		return nil, ErrNotImplemented
  	}
  	localIP := localTCP.IP.To4()
  	if localIP == nil {
  		return nil, ErrNotImplemented
  	}
  	remoteIP := remoteTCP.IP.To4()
  	if remoteIP == nil {
  		return nil, ErrNotImplemented
  	}
  
  	s, err := nl.Subscribe(unix.NETLINK_INET_DIAG)
  	if err != nil {
  		return nil, err
  	}
  	defer s.Close()
  	req := nl.NewNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, 0)
  	req.AddData(&socketRequest{
  		Family:   unix.AF_INET,
  		Protocol: unix.IPPROTO_TCP,
  		ID: SocketID{
  			SourcePort:      uint16(localTCP.Port),
  			DestinationPort: uint16(remoteTCP.Port),
  			Source:          localIP,
  			Destination:     remoteIP,
  			Cookie:          [2]uint32{nl.TCPDIAG_NOCOOKIE, nl.TCPDIAG_NOCOOKIE},
  		},
  	})
  	s.Send(req)
  	msgs, err := s.Receive()
  	if err != nil {
  		return nil, err
  	}
  	if len(msgs) == 0 {
  		return nil, errors.New("no message nor error from netlink")
  	}
  	if len(msgs) > 2 {
  		return nil, fmt.Errorf("multiple (%d) matching sockets", len(msgs))
  	}
  	sock := &Socket{}
  	if err := sock.deserialize(msgs[0].Data); err != nil {
  		return nil, err
  	}
  	return sock, nil
  }
docs: // SocketGet returns the Socket identified by its local and remote addresses.