私は開いているTCP接続を持っていて、そのようなforループでそれから読み取ります
for {
// tx.Text is of type textproto.Conn
// the underlying connection is stored in tx.Conn
l, err := tx.Text.Reader.ReadLine()
// do stuff with the text line ...
}
今、私はこのようにTLSへの接続をアップグレードしたいと思います(TlsConf
でロードされた証明書が含まれていますtls.LoadX509KeyPair
)
tx.Conn = tls.Server(tx.Conn, tx.Server.Conf.TlsConf)
tx.Text = textproto.NewConn(tx.Conn)
これを行うと、サーバーがハンドシェイクを試行したときにクライアントでセグメンテーション違反が発生します。SMTPサーバーを実装しており、フラグを使用してswak-tls
でテストしています。スワックの最終出力は次のとおりです
-> STARTTLS
<- 220 Start TLS
Segmentation fault: 11
swaksはテスト済みのツールであり、以前に持っていたnodeJS SMTP実装で動作したため、エラーがクライアント側にあるとは思われません。
私は何を間違えたのですか、それとも何が欠けていますか?
PS:TLS接続が既存の安全でない接続から開始された場合、正確には何が起こりますか?クライアントは別のポートで新しい接続を確立しますか、それとも接続は再利用されますか?