@cryptotaxi247 / kubo / commits / 0075a352d

only send local version once

Henry committed Oct 16, 2014 at 12:03 UTC 0075a352da6af9c16af3ce92fb099929405c10df
1 file changed +13 -3
net/swarm/conn.go
+13 -3
@@ -169,6 +169,10 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error {
169 return fmt.Errorf("connVersionExchange: could not prepare local version: %q", err)
170 }
171
172 + // buffered channel to send our version just once
173 + outBuf := make(chan []byte, 1)
174 + outBuf <- myVersionMsg.Data()
175 +
176 var gotTheirs, sendMine bool
177 for {
178 if gotTheirs && sendMine {
@@ -184,9 +188,13 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error {
188 case <-remote.Closed:
189 return errors.New("remote closed connection during version exchange")
190
187 - case remote.Secure.Out <- myVersionMsg.Data():
188 - log.Debug("[peer: %s] Send my version(%s) to %s", s.local, myVersion, remote.Peer)
189 - sendMine = true
191 + case our, ok := <-outBuf:
192 + if ok {
193 + remote.Secure.Out <- our
194 + sendMine = true
195 + close(outBuf) // only send local version once
196 + log.Debug("[peer: %s] Send my version(%s) to %s", s.local, myVersion, remote.Peer)
197 + }
198
199 case data, ok := <-remote.Secure.In:
200 if !ok {
@@ -202,6 +210,8 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error {
210 return fmt.Errorf("connSetup: could not decode remote version: %q", err)
211 }
212 gotTheirs = true
213 +
214 + // BUG(cryptix): could add another case here to trigger resending our version
215 }
216 }
217