Я работаю над очень простым сервером сокетов python. Я использую неблокирующие сокеты. Сервер и клиент работают на Windows 7 x64 с помощью python 2.7.3. Вот код, где я получаю данные от клиента:Python socket.recv exception
def listenToSockets(self):
while True:
changed_sockets = self.currentSockets
ready_to_read, ready_to_write, in_error = select.select(changed_sockets,[],[])
for s in ready_to_read:
# if its the server master socket someone is connecting
if s == self.socket:
(client_socket, address) = s.accept()
print "putting " + address[0] + " onto connections\n";
client_socket.setblocking(0)
self.currentSockets.append(client_socket)
print "current client count : " + str(len(self.currentSockets) - 1)
else:
data = ''
try:
while True:
part = s.recv(4096)
if part != '':
data = data + part
elif part == '':
break
except socket.error, (value,message):
print 'socket.error - ' + message
if data != '':
print "server received "+data
else:
print "Disconnected "+str(s.getsockname())
self.currentSockets.remove(s)
s.close()
А вот клиент посылает некоторые данные снова и снова:
#client example
import socket
import time
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('192.168.0.41', 9999))
while 1:
client_socket.send("test")
time.sleep(2)
Я вижу, сервер, принимающий сообщение «тест» над и снова. Но прежде чем он распечатает, что он получил, я получаю следующее сообщение об ошибке.
socket.error - A non-blocking socket operation could not be completed immediately.
Очевидно исключение выбрасывается в part = s.recv(4096)
, но почему?
Обнаружили ошибку в этой ссылке. 10035 не является фатальной ошибкой и бросается, когда нет данных для получения. http://msdn.microsoft.com/en-ca/library/windows/desktop/ms740668(v=vs.85).aspx –