Есть сервер под freebsd, к сетевому интерфейсу помимо основного IP адреса (A) привязано еще N алиасов (B1,B2,B3,BN).
Есть программа скачивающая что-то по сети и она использует asyncore. По умолчанию, программа коннектится с основного IP адреса - A. Необходимо научить программу конектится с других адресов.
Собственно я попробовал просто вызывать метод self.bind((BN, port)) и оно вроде работает (см листинг). Вопрос только в том какой указывать порт и чем это может грозить. Стоит ли указывать случайный порт >1024 или нормально всегда указывать одинаковый? У меня примерно 600 потоков работает.
Может быть кто сталкивался уже с такой задачей?
Вот тестовая программа:
import asyncore, socket
class http_client(asyncore.dispatcher):
def __init__(self, host, path):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.bind(('1.1.1.1', 11111))
self.connect( (host, 80) )
self.buffer = 'GET '+path+' HTTP/1.0\r\n'
self.buffer += 'User-Agent: Mozilla/1.0\r\n'
self.buffer += '\r\n';
def handle_connect(self):
pass
def handle_close(self):
self.close()
def handle_read(self):
print self.recv(8192)
def writable(self):
return (len(self.buffer) > 0)
def handle_write(self):
sent = self.send(self.buffer)
self.buffer = self.buffer[sent:]
c = http_client('whatismyip.org', '/')
asyncore.loop()