1
2
3
4
5
6 import socket
7
8 CHUNK_SIZE = (16 * 1024)
9 MAX_BODY = 1024 * 112
10
11 try:
12 import ssl
13 _ssl_wrap_socket = ssl.wrap_socket
14 except ImportError:
16 ssl_sock = socket.ssl(sock, key_file, cert_file)
17 return ssl_sock
18
19 if not hasattr(socket, '_GLOBAL_DEFAULT_TIMEOUT'):
20 _GLOBAL_DEFAULT_TIMEOUT = object()
21 else:
22 _GLOBAL_DEFAULT_TIMEOUT = socket._GLOBAL_DEFAULT_TIMEOUT
23
26 msg = "getaddrinfo returns an empty list"
27 host, port = address
28 for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
29 af, socktype, proto, canonname, sa = res
30 sock = None
31 try:
32 sock = socket.socket(af, socktype, proto)
33 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
34 sock.settimeout(timeout)
35 sock.connect(sa)
36 if ssl:
37 sock = _ssl_wrap_socket(sock, key_file, cert_file)
38 return sock
39 except socket.error, msg:
40 if sock is not None:
41 sock.close()
42 raise socket.error, msg
43
45 if not skt: return
46 try:
47 skt.close()
48 except socket.error:
49 pass
50
52 chunk = "".join(("%X\r\n" % len(data), data, "\r\n"))
53 sock.sendall(chunk)
54
55 -def send(sock, data, chunked=False):
59
61 timeout = sock.gettimeout()
62 if timeout != 0.0:
63 try:
64 sock.setblocking(0)
65 return send(sock, data, chunked)
66 finally:
67 sock.setblocking(1)
68 else:
69 return send(sock, data, chunked)
70
72 for line in list(lines):
73 send(sock, line, chunked)
74
76 if hasattr(data, 'seek'):
77 data.seek(0)
78
79 while True:
80 binarydata = data.read(CHUNK_SIZE)
81 if binarydata == '': break
82 send(sock, binarydata, chunked)
83