Я пишу простое клиент-серверное приложение на основе UDP и тестирую клиент-сервер на локальном хосте, и я хотел бы, чтобы отправитель знал, когда send () заблокировался бы.Я использую Python, поэтому я думаю, что могу сделать:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setblocking(0)
s.connect(('127.0.0.1', 12345))
data = "x"
for i in range(0, 9000): # More than about 9000 gives an error
data += x
while True:
try:
s.send(data)
except socket.error as e:
print "Would have blocked"
# Do something useful here
Я хотел бы проверить, что мой код обработки ошибок работает, поэтому я хотел бы получить send () для блокировки.Проблема в том, что я не могу понять, как это сделать.Я попытался иметь:
BUFFSIZE = 2000
input = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
input.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, BUFFSIZE)
input.bind(('127.0.0.1', 12345))
while True:
data = input.recv(BUFFSIZE)
time.sleep(100)
Между сном в течение 100 секунд и установкой небольшого буфера приема, я ожидал бы, что буфер заполнен.Однако этого никогда не происходит.Итак, как я могу получить буфер приема для заполнения, чтобы отправлять блоки?
Я использую Mac OS Lion и версию Python 2.6 для Macports.