author | Tero Marttila <terom@fixme.fi> |
Sun, 23 Aug 2009 22:31:12 +0300 | |
changeset 30 | 0e0b9bc2c96b |
parent 21 | 19d212c948e0 |
permissions | -rw-r--r-- |
6 | 1 |
""" |
2 |
Sockect Object/API |
|
3 |
""" |
|
4 |
||
5 |
ctypedef int socket_t |
|
6 |
||
8 | 7 |
cdef class socket : |
6 | 8 |
""" |
9 |
Represents a single OS-level socket |
|
10 |
||
30 | 11 |
>>> from qmsk.net.socket import af_inet |
13
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
12 |
>>> from qmsk.net.socket.constants import * |
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
13 |
|
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
14 |
>>> s = socket(1337) |
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
15 |
Traceback (most recent call last): |
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
16 |
... |
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
17 |
OSError: [Errno 97] Address family not supported by protocol |
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
18 |
|
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
19 |
>>> s = socket(fd=1337) |
6 | 20 |
>>> s.send('foo') |
21 |
Traceback (most recent call last): |
|
22 |
... |
|
23 |
OSError: [Errno 9] Bad file descriptor |
|
13
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
24 |
|
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
25 |
>>> s = socket(AF_INET, SOCK_STREAM) |
30 | 26 |
>>> s.bind(af_inet.sockaddr_in('127.0.0.1', 1337)) |
6 | 27 |
>>> s.listen(1) |
28 |
>>> s.listen(0) |
|
13
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
29 |
|
a1091632a8a7
implement __cinit__, shutdown, close, __dealloc__ for socket, and also add a try-except to not leak client sock from accept()
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
30 |
>>> s = socket() |
30 | 31 |
>>> s.connect(af_inet.sockaddr_in('127.0.0.1', 1338)) |
8 | 32 |
Traceback (most recent call last): |
33 |
... |
|
34 |
OSError: [Errno 111] Connection refused |
|
35 |
||
21 | 36 |
|
37 |
>>> s1 = socket(AF_INET, SOCK_STREAM); s2 = socket(AF_INET, SOCK_STREAM) |
|
38 |
>>> s1.listen(1); |
|
39 |
>>> s2.connect(s1.getsockname()) |
|
40 |
>>> s12, s12_addr = s1.accept() |
|
41 |
>>> s12_addr == s12.getpeername() == s2.getsockname() |
|
42 |
True |
|
43 |
>>> s1.close(); s2.close() |
|
44 |
||
6 | 45 |
""" |
46 |
||
47 |
cdef readonly socket_t fd |
|
48 |