@@ -612,7 +612,6 @@ def sendall(self, data, flags=0):
612612
613613 while sent < length :
614614 ret = self .write (data [sent :])
615-
616615 sent += ret
617616
618617 return None
@@ -736,11 +735,15 @@ def unwrap(self):
736735 Returns the wrapped OS socket.
737736 """
738737 if self .native_object != _ffi .NULL :
739- _lib .wolfSSL_shutdown (self .native_object )
738+ if self ._connected :
739+ # Single-step shutdown is intentional; any
740+ # bidirectional close_notify exchange is the
741+ # caller's responsibility on the raw socket.
742+ _lib .wolfSSL_shutdown (self .native_object )
740743 self ._release_native_object ()
741744
742745 sock = socket (family = self ._sock .family ,
743- sock_type = self ._sock .type ,
746+ type = self ._sock .type ,
744747 proto = self ._sock .proto ,
745748 fileno = self ._sock .fileno ())
746749
@@ -750,19 +753,19 @@ def unwrap(self):
750753 return sock
751754
752755 def add_peer (self , addr ):
753- peerAddr = _lib .wolfSSL_dtls_create_peer (addr [1 ],t2b (addr [0 ]))
754- if peerAddr == _ffi .NULL :
755- raise SSLError ("Failed to create peer" )
756- try :
757- ret = _lib .wolfSSL_dtls_set_peer (
758- self .native_object , peerAddr ,
759- _SOCKADDR_SZ )
760- if ret != _SSL_SUCCESS :
761- raise SSLError (
762- "Unable to set dtls peer."
763- " E(%d)" % ret )
764- finally :
765- _lib .wolfSSL_dtls_free_peer (peerAddr )
756+ peerAddr = _lib .wolfSSL_dtls_create_peer (addr [1 ], t2b (addr [0 ]))
757+ if peerAddr == _ffi .NULL :
758+ raise SSLError ("Failed to create peer" )
759+ try :
760+ ret = _lib .wolfSSL_dtls_set_peer (
761+ self .native_object , peerAddr ,
762+ _SOCKADDR_SZ )
763+ if ret != _SSL_SUCCESS :
764+ raise SSLError (
765+ "Unable to set dtls peer."
766+ " E(%d)" % ret )
767+ finally :
768+ _lib .wolfSSL_dtls_free_peer (peerAddr )
766769
767770 def do_handshake (self , block = False ): # pylint: disable=unused-argument
768771 """
@@ -912,7 +915,11 @@ def version(self):
912915 # API and are provided here for compatibility.
913916 def close (self ):
914917 if self .native_object != _ffi .NULL :
915- _lib .wolfSSL_shutdown (self .native_object )
918+ if self ._connected :
919+ # Single-step shutdown is intentional here; the
920+ # socket is about to be closed so a bidirectional
921+ # close_notify exchange is not required.
922+ _lib .wolfSSL_shutdown (self .native_object )
916923 self ._release_native_object ()
917924 self ._sock .close ()
918925
@@ -1048,8 +1055,7 @@ def _get_passwd(self, passwd, sz, rw, userdata):
10481055 "Problem getting password from callback" )
10491056 if not isinstance (result , bytes ):
10501057 raise ValueError (
1051- "Password callback must return bytes,"
1052- " not str" )
1058+ "Password callback must return bytes" )
10531059 if len (result ) > sz :
10541060 raise ValueError (
10551061 "Problem with password returned"
0 commit comments