def connect(self, address, port, head = -1, block = False, timeout = 0):
self.close()
self.block = block
af = socket.AF_INET
if ':' in address:
if not 'AF_INET6' in socket.__dict__:
return -1
if not socket.has_ipv6:
return -2
af = socket.AF_INET6
self.ipv6 = True
self.sock = socket.socket(af, socket.SOCK_STREAM)
to = self.sock.gettimeout()
if not self.block:
self.sock.setblocking(0)
elif timeout > 0:
self.sock.settimeout(timeout)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
self.state = NET_STATE_CONNECTING
try:
hr = self.sock.connect_ex((address, port))
except socket.error, e:
if self.block:
self.close()
return -3
if self.block and hr != 0:
return -4
if self.block and timeout > 0:
self.sock.settimeout(to)
self.send_buf = ''
self.recv_buf = ''
self.errc = 0
if head >= 0 and head <= 14:
self.__head_init(head)
if self.block:
self.state = NET_STATE_ESTABLISHED
return 0
# close connection
评论列表
文章目录