func newPassiveSocket(logger *ftpLogger, passiveOpts *PassiveOpts, tlsConfig *tls.Config) (*ftpPassiveSocket, error) { socket := &ftpPassiveSocket{ listener: nil, listenerMutex: &sync.RWMutex{}, conn: nil, connMutex: &sync.RWMutex{}, closed: false, closedMutex: &sync.RWMutex{}, connected: goevent.NewEvent(), host: "", port: 0, logger: logger, passiveOpts: passiveOpts, tlsConfig: tlsConfig, } listener, err := socket.createListener() if err != nil { return nil, fmt.Errorf("newPassiveSocket socket could not be created: %s", err) } socket.listener = listener go socket.acceptConnection() return socket, nil }
func newActiveSocket(host string, port int, logger *ftpLogger) (*ftpActiveSocket, error) { connectTo := buildTcpString(host, port) logger.Print("Opening active data connection to " + connectTo) raddr, err := net.ResolveTCPAddr("tcp", connectTo) if err != nil { logger.Print(err) return nil, err } tcpConn, err := net.DialTCP("tcp", nil, raddr) if err != nil { logger.Print(err) return nil, err } socket := new(ftpActiveSocket) socket.conn = tcpConn socket.host = host socket.port = port socket.logger = logger socket.connected = goevent.NewEvent() socket.connected.Set() return socket, nil }