Browse Source

(HL) Fixed non-blocking SSL Socket connect (#6452)

Pascal Peridont 8 years ago
parent
commit
a5380c41b4
1 changed files with 8 additions and 1 deletions
  1. 8 1
      std/hl/_std/sys/ssl/Socket.hx

+ 8 - 1
std/hl/_std/sys/ssl/Socket.hx

@@ -108,6 +108,7 @@ class Socket extends sys.net.Socket {
 	private var altSNIContexts : Null<Array<{match: String->Bool, key: Key, cert: Certificate}>>;
 	private var altSNIContexts : Null<Array<{match: String->Bool, key: Key, cert: Certificate}>>;
 	private var sniCallback : hl.Bytes -> SNICbResult;
 	private var sniCallback : hl.Bytes -> SNICbResult;
 	private var handshakeDone : Bool;
 	private var handshakeDone : Bool;
+	private var isBlocking : Bool = true;
 
 
 	private override function init() : Void {
 	private override function init() : Void {
 		__s = sys.net.Socket.socket_new( false );
 		__s = sys.net.Socket.socket_new( false );
@@ -133,7 +134,8 @@ class Socket extends sys.net.Socket {
 			ssl_set_hostname( ssl, @:privateAccess hostname.toUtf8() );
 			ssl_set_hostname( ssl, @:privateAccess hostname.toUtf8() );
 		if( !sys.net.Socket.socket_connect( __s, host.ip, port ) )
 		if( !sys.net.Socket.socket_connect( __s, host.ip, port ) )
 			throw new Sys.SysError("Failed to connect on "+host.toString()+":"+port);
 			throw new Sys.SysError("Failed to connect on "+host.toString()+":"+port);
-		handshake();
+		if( isBlocking )
+			handshake();
 	}
 	}
 
 
 	public function handshake() : Void {
 	public function handshake() : Void {
@@ -148,6 +150,11 @@ class Socket extends sys.net.Socket {
 		}
 		}
 	}
 	}
 
 
+	override function setBlocking( b : Bool ) : Void {
+		super.setBlocking(b);
+		isBlocking = b;
+	}
+
 	public function setCA( cert : Certificate ) : Void {
 	public function setCA( cert : Certificate ) : Void {
 		caCert = cert;
 		caCert = cert;
 	}
 	}