def write(self, fd):
'''????????
'''
# ??socket
sock_state = self.conn_state[fd]
conn = sock_state.sock_obj
# ????????????
last_have_send = sock_state.have_write
try:
# ?????? conn.send ?????????
have_send = conn.send(sock_state.buff_write[last_have_send:])
# ?????????
sock_state.have_write += have_send
# ???????????
sock_state.need_write -= have_send
# ??????????????? ???????????
if sock_state.need_write == 0 and sock_state.have_write != 0:
# ????????????,????????????
self.setFd(conn)
self.conn_state[fd].state = "read"
self.epoll_sock.modify(fd, select.EPOLLIN)
except socket.error, msg:
# ?send???????socket?????epoll?????????????
# ???????????[Errno 11] Resource temporarily unavailable
# ???????epoll??????,?????epoll????
if msg.errno == 11:
return
sock_state.state = "closing"
self.state_machine(fd)
评论列表
文章目录