upcast net.Conn to *net.TCPConn as soon as client-side peer connection is established
This commit is contained in:
		@ -4,7 +4,7 @@ import "fmt"
 | 
			
		||||
import "net"
 | 
			
		||||
import "sync"
 | 
			
		||||
 | 
			
		||||
func NewClientPeerConn(r *ClientRoute, c net.Conn, id uint32) (*ClientPeerConn) {
 | 
			
		||||
func NewClientPeerConn(r *ClientRoute, c *net.TCPConn, id uint32) (*ClientPeerConn) {
 | 
			
		||||
	var cpc ClientPeerConn
 | 
			
		||||
 | 
			
		||||
	cpc.route = r
 | 
			
		||||
@ -59,12 +59,7 @@ func (cpc *ClientPeerConn) ReqStop() {
 | 
			
		||||
func (cpc* ClientPeerConn) CloseWrite() {
 | 
			
		||||
	if cpc.server_peer_eof.CompareAndSwap(false, true) {
 | 
			
		||||
		if cpc.conn != nil {
 | 
			
		||||
			var conn *net.TCPConn
 | 
			
		||||
			var ok bool
 | 
			
		||||
			conn, ok = cpc.conn.(*net.TCPConn)
 | 
			
		||||
			if ok {
 | 
			
		||||
				conn.CloseWrite()
 | 
			
		||||
			}
 | 
			
		||||
			cpc.conn.CloseWrite()
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								client.go
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								client.go
									
									
									
									
									
								
							@ -55,7 +55,7 @@ type Client struct {
 | 
			
		||||
type ClientPeerConn struct {
 | 
			
		||||
	route *ClientRoute
 | 
			
		||||
	conn_id uint32
 | 
			
		||||
	conn net.Conn
 | 
			
		||||
	conn *net.TCPConn
 | 
			
		||||
	remot_conn_id uint32
 | 
			
		||||
 | 
			
		||||
	addr     string // peer address
 | 
			
		||||
@ -179,10 +179,12 @@ fmt.Printf ("*** Sent stop request to Route..\n");
 | 
			
		||||
func (r* ClientRoute) ConnectToPeer(pts_id uint32) {
 | 
			
		||||
	var err error
 | 
			
		||||
	var conn net.Conn
 | 
			
		||||
	var real_conn *net.TCPConn
 | 
			
		||||
	var ptc *ClientPeerConn
 | 
			
		||||
	var d net.Dialer
 | 
			
		||||
	var ctx context.Context
 | 
			
		||||
	//var cancel context.CancelFunc
 | 
			
		||||
	var ok bool
 | 
			
		||||
 | 
			
		||||
// TODO: how to abort blocking DialTCP()? call cancellation funtion?
 | 
			
		||||
// TODO: make timeuot value configurable
 | 
			
		||||
@ -198,7 +200,14 @@ func (r* ClientRoute) ConnectToPeer(pts_id uint32) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ptc, err = r.AddNewClientPeerConn(conn, pts_id)
 | 
			
		||||
	real_conn, ok = conn.(*net.TCPConn)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		fmt.Printf("not tcp connection - %s\n", err.Error())
 | 
			
		||||
		conn.Close()
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ptc, err = r.AddNewClientPeerConn(real_conn, pts_id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		// TODO: logging
 | 
			
		||||
// TODO: make send peer started failure mesage?
 | 
			
		||||
@ -641,7 +650,7 @@ func (cts *ServerConn) ReportEvent (route_id uint32, pts_id uint32, event_type P
 | 
			
		||||
}
 | 
			
		||||
// --------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
func (r *ClientRoute) AddNewClientPeerConn (c net.Conn, pts_id uint32) (*ClientPeerConn, error) {
 | 
			
		||||
func (r *ClientRoute) AddNewClientPeerConn (c *net.TCPConn, pts_id uint32) (*ClientPeerConn, error) {
 | 
			
		||||
	var ptc *ClientPeerConn
 | 
			
		||||
	//var ok bool
 | 
			
		||||
	//var start_id uint32
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user