mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-31 15:25:57 +00:00
Merge pull request #124425 from aroradaman/fix-agnhost-sctp
Fix agnhost sctp
This commit is contained in:
commit
122816f894
@ -1 +1 @@
|
||||
2.49
|
||||
2.50
|
||||
|
@ -47,12 +47,14 @@ var (
|
||||
timeout time.Duration
|
||||
protocol string
|
||||
udpData string
|
||||
sctpData string
|
||||
)
|
||||
|
||||
func init() {
|
||||
CmdConnect.Flags().DurationVar(&timeout, "timeout", time.Duration(0), "Maximum time before returning an error")
|
||||
CmdConnect.Flags().StringVar(&protocol, "protocol", "tcp", "The protocol to use to perform the connection, can be tcp, udp or sctp")
|
||||
CmdConnect.Flags().StringVar(&udpData, "udp-data", "hostname", "The UDP payload send to the server")
|
||||
CmdConnect.Flags().StringVar(&sctpData, "sctp-data", "hostname", "The SCTP payload send to the server")
|
||||
}
|
||||
|
||||
func main(cmd *cobra.Command, args []string) {
|
||||
@ -63,7 +65,7 @@ func main(cmd *cobra.Command, args []string) {
|
||||
case "udp":
|
||||
connectUDP(dest, timeout, udpData)
|
||||
case "sctp":
|
||||
connectSCTP(dest, timeout)
|
||||
connectSCTP(dest, timeout, sctpData)
|
||||
default:
|
||||
fmt.Fprint(os.Stderr, "Unsupported protocol\n", protocol)
|
||||
os.Exit(1)
|
||||
@ -103,7 +105,11 @@ func connectTCP(dest string, timeout time.Duration) {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
func connectSCTP(dest string, timeout time.Duration) {
|
||||
func connectSCTP(dest string, timeout time.Duration, data string) {
|
||||
var (
|
||||
buf = make([]byte, 1024)
|
||||
conn *sctp.SCTPConn
|
||||
)
|
||||
addr, err := sctp.ResolveSCTPAddr("sctp", dest)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "DNS: %v\n", err)
|
||||
@ -114,11 +120,24 @@ func connectSCTP(dest string, timeout time.Duration) {
|
||||
errCh := make(chan error)
|
||||
|
||||
go func() {
|
||||
conn, err := sctp.DialSCTP("sctp", nil, addr)
|
||||
if err == nil {
|
||||
conn.Close()
|
||||
conn, err = sctp.DialSCTP("sctp", nil, addr)
|
||||
if err != nil {
|
||||
errCh <- err
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
errCh <- conn.Close()
|
||||
}()
|
||||
|
||||
if _, err = conn.Write([]byte(fmt.Sprintf("%s\n", data))); err != nil {
|
||||
errCh <- err
|
||||
return
|
||||
}
|
||||
|
||||
if _, err = conn.Read(buf); err != nil {
|
||||
errCh <- err
|
||||
return
|
||||
}
|
||||
errCh <- err
|
||||
}()
|
||||
|
||||
select {
|
||||
|
@ -693,7 +693,11 @@ func startSCTPServer(sctpPort int) {
|
||||
for {
|
||||
conn, err := listener.AcceptSCTP()
|
||||
assertNoError(err, fmt.Sprintf("failed accepting SCTP connections"))
|
||||
clientAddress := conn.RemoteAddr().String()
|
||||
remoteAddr, err := conn.SCTPRemoteAddr(0)
|
||||
if err != nil {
|
||||
assertNoError(err, "failed to get SCTP client remote address")
|
||||
}
|
||||
clientAddress := remoteAddr.String()
|
||||
n, err := conn.Read(buf)
|
||||
assertNoError(err, fmt.Sprintf("failed to read from SCTP client %s", clientAddress))
|
||||
receivedText := strings.ToLower(strings.TrimSpace(string(buf[0:n])))
|
||||
|
Loading…
Reference in New Issue
Block a user