almost done

This commit is contained in:
clowwindy
2014-06-01 14:10:18 +08:00
parent bacf9cb443
commit 47fd479d6e
5 changed files with 122 additions and 528 deletions

View File

@ -76,7 +76,7 @@ class TCPRelayHandler(object):
self._downstream_status = STATUS_WAIT_READING
fd_to_handlers[local_sock.fileno()] = self
local_sock.setblocking(False)
loop.add(local_sock, eventloop.POLL_IN)
loop.add(local_sock, eventloop.POLL_IN | eventloop.POLL_ERR)
def update_stream(self, stream, status):
dirty = False
@ -186,7 +186,8 @@ class TCPRelayHandler(object):
self._remote_sock.setblocking(False)
# TODO support TCP fast open
self._remote_sock.connect(sa)
self._loop.add(self._remote_sock, eventloop.POLL_OUT)
self._loop.add(self._remote_sock,
eventloop.POLL_ERR | eventloop.POLL_OUT)
if len(data) > header_length:
self._data_to_write_to_remote.append(data[header_length:])
@ -301,7 +302,8 @@ class TCPRelay(object):
def _run(self):
server_socket = self._server_socket
self._eventloop = eventloop.EventLoop()
self._eventloop.add(server_socket, eventloop.POLL_IN)
self._eventloop.add(server_socket,
eventloop.POLL_IN | eventloop.POLL_ERR)
last_time = time.time()
while not self._closed:
try:
@ -315,6 +317,9 @@ class TCPRelay(object):
continue
for sock, event in events:
if sock == self._server_socket:
if event & eventloop.POLL_ERR:
# TODO
raise Exception('server_socket error')
try:
conn = self._server_socket.accept()
TCPRelayHandler(self._fd_to_handlers, self._eventloop,