Проблема, связанная с непатченной сборкой 2.6.6.Другими словами, это относится к известной ошибке, которая позже была исправлена.Видимо, я получил сборку Python, которая не включала это исправление.
Пожалуйста, смотрите этот пост для получения дополнительной информации об этой проблеме: https://svn.macports.org/ticket/18376
Исправленная версия установила HAVE_POLL = 0, заставляя python вместо этого использовать select.Убедитесь, что вы используете версию python, включающую этот патч, или если большие блоки данных будут зависать.
Еще одно решение - переписать метод отправки httplib.py, чтобы перехватить исключение '35' и повторно отправитьданные.
Вот код, который иллюстрирует это:
blen = len(str)
bleft = len(str)
bpos = 0
bsize = 1024*8
while bleft > 0:
bend = bpos + bsize
if bend >= blen:
bend = blen
try:
slen = self.sock.send(str[bpos:bend])
except socket.error, v:
if v.args[0] == 35: # unavailable
#print('socket unavailable')
slen = 0
time.sleep(.5)
else:
raise
bleft -= slen
bpos += slen
вместо self.sock.sendall