mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	Merge pull request #165 from cathugger/master
rearrange tcp reading loop
This commit is contained in:
		
						commit
						9ff08c1b34
					
				
					 1 changed files with 17 additions and 14 deletions
				
			
		| 
						 | 
					@ -324,26 +324,29 @@ func (iface *tcpInterface) reader(sock net.Conn, in func([]byte)) error {
 | 
				
			||||||
		timeout := time.Now().Add(tcp_timeout)
 | 
							timeout := time.Now().Add(tcp_timeout)
 | 
				
			||||||
		sock.SetReadDeadline(timeout)
 | 
							sock.SetReadDeadline(timeout)
 | 
				
			||||||
		n, err := sock.Read(bs[len(frag):])
 | 
							n, err := sock.Read(bs[len(frag):])
 | 
				
			||||||
 | 
							if n > 0 {
 | 
				
			||||||
 | 
								frag = bs[:len(frag)+n]
 | 
				
			||||||
 | 
								for {
 | 
				
			||||||
 | 
									msg, ok, err2 := tcp_chop_msg(&frag)
 | 
				
			||||||
 | 
									if err2 != nil {
 | 
				
			||||||
 | 
										return fmt.Errorf("Message error: %v", err2)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if !ok {
 | 
				
			||||||
 | 
										// We didn't get the whole message yet
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									newMsg := append(util_getBytes(), msg...)
 | 
				
			||||||
 | 
									in(newMsg)
 | 
				
			||||||
 | 
									util_yield()
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								frag = append(bs[:0], frag...)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if err != nil || n == 0 {
 | 
							if err != nil || n == 0 {
 | 
				
			||||||
			if err != io.EOF {
 | 
								if err != io.EOF {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			return nil
 | 
								return nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		frag = bs[:len(frag)+n]
 | 
					 | 
				
			||||||
		for {
 | 
					 | 
				
			||||||
			msg, ok, err := tcp_chop_msg(&frag)
 | 
					 | 
				
			||||||
			if err != nil {
 | 
					 | 
				
			||||||
				return fmt.Errorf("Message error: %v", err)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			if !ok {
 | 
					 | 
				
			||||||
				break
 | 
					 | 
				
			||||||
			} // We didn't get the whole message yet
 | 
					 | 
				
			||||||
			newMsg := append(util_getBytes(), msg...)
 | 
					 | 
				
			||||||
			in(newMsg)
 | 
					 | 
				
			||||||
			util_yield()
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		frag = append(bs[:0], frag...)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue