次のようなデータを受信するためのコードをいくつか取得しました: (SSL が使用されています)
sockListToCheck = self.getSocketList(self.clientSocketsWTTL)
socksReady, w, e = select.select(sockListToCheck,[],[], d_consts.SELECT_SEC)
if not socksReady: #list empty
print 'not ready'
return #nothing received yet so don't change anything
leftInError = False
#we have something
for sock in socksReady:
dataBuf = ""
c1 = 5
c2 = 5
while True:
try:
dat = sock.recv(d_consts.BUF_SIZE) # read what is there to read
dataBuf += dat
print(dat), len(dat)
if len(dat) < d_consts.BUF_SIZE and c1 == 0:
c1 -= 1
print 'about to break'
break
except ssl.SSLError as e:
#print 'trying to read '
# Ignore the SSL equivalent of EWOULDBLOCK, but re-raise other errors
#print e
if e.errno != ssl.SSL_ERROR_WANT_READ:
print 'serious ssl error'
sock.shutdown(socket.SHUT_RDWR)
sock.close() #close
leftInError = True
else:
if c2 == 0:
break
c2 -= 1
continue
if (leftInError):
leftInError = False
print 'left error'
continue
大幅な遅延があると問題が発生するので、それらのカウンターを追加しました。私の問題は、メッセージの大きさがわからない場合、受信を停止するタイミングがわからないことです。以前は、受信量がバッファよりも少ないときに中断していましたが、とにかくこれが発生することがあり、すべてのデータが到着したわけではないようです. 他の方法はありますか?多分タイムアウトか何か?