示例#1
0
    def work(self, task):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            pro_, rest = splittype(task[0])
            host, rest = splithost(rest)
            host, port = splitport(host)
            task.append(rest)
            task.append(host)
            sock.setblocking(0)
            sock.connect_ex((host, int(port) if port else 80))

            def timeout_cb():
                if not sock._closed:
                    KBEngine.deregisterWriteFileDescriptor(sock.fileno())
                    sock.close()
                if task and task[2]:
                    task[2](None)

            self._write_timer[sock.fileno()] = self.add_timer(
                REQUEST_TIMEOUT, timeout_cb)
            KBEngine.registerWriteFileDescriptor(
                sock.fileno(), Functor(self.onSend, task, sock))
        except:
            self._tasks.append(task)
            self.logsError()
            if not sock._closed:
                sock.close()
示例#2
0
 def write_response(self, response):
     self._write_buffer = response.output()
     self.send_body_size = len(self._write_buffer)
     self._write_to_fd(False, self._fd)
     if self._check_send_finish():
         self.write_completed()
     else:
         # 一次没有发完,注册fd,交给epoll
         DEBUG_MSG("Connection::register write fd: %s" % self._fd)
         KBEngine.registerWriteFileDescriptor(
             self._fd, Functor(self._write_to_fd, True))
 def steps(self):
     if not self._sock and len(self._reqs) > 0:
         try:
             self._reqs_curt = self._reqs.pop()
             self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
             self._sock_send = False
             proto, rest = urllib.parse.splittype(self._reqs_curt[0])
             host, rest = urllib.parse.splithost(rest)
             host, port = urllib.parse.splitport(host)
             self._reqs_curt.append(rest)
             self._reqs_curt.append(host)
             self._sock.setblocking(0)
             self._sock.connect_ex((host, int(port) if port else 80))
             self._write_dt = self.addTimer(10, 60, TIME_TYPE_TIME_OUT)
             KBEngine.registerWriteFileDescriptor(self._sock.fileno(), self.onSend)
         except:
             self._reqs.append(self._reqs_curt)
             self.logsError()
             self.cleanSocketStatus()
示例#4
0
 def registerWrite(self):
     if self._registerWrite == False:
         KBEngine.registerWriteFileDescriptor(self._socket.fileno(),
                                              self.onWrite)
         self._registerWrite = True