qmsk/net/socket/socket.pxd
author Tero Marttila <terom@fixme.fi>
Sun, 23 Aug 2009 22:31:12 +0300
changeset 30 0e0b9bc2c96b
parent 21 19d212c948e0
permissions -rw-r--r--
fix doctests
6
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Sockect Object/API
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
ctypedef int socket_t
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
8
b3880dafbab1 phew, things are working
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
     7
cdef class socket :
6
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
    """
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
        Represents a single OS-level socket
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
        
30
0e0b9bc2c96b fix doctests
Tero Marttila <terom@fixme.fi>
parents: 21
diff changeset
    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
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
        >>> s.send('foo')
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
        Traceback (most recent call last):
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
          ...
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    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
0e0b9bc2c96b fix doctests
Tero Marttila <terom@fixme.fi>
parents: 21
diff changeset
    26
        >>> s.bind(af_inet.sockaddr_in('127.0.0.1', 1337))
6
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        >>> s.listen(1)
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    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
0e0b9bc2c96b fix doctests
Tero Marttila <terom@fixme.fi>
parents: 21
diff changeset
    31
        >>> s.connect(af_inet.sockaddr_in('127.0.0.1', 1338))
8
b3880dafbab1 phew, things are working
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    32
        Traceback (most recent call last):
b3880dafbab1 phew, things are working
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    33
          ...
b3880dafbab1 phew, things are working
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    34
        OSError: [Errno 111] Connection refused
b3880dafbab1 phew, things are working
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    35
        
21
19d212c948e0 fix up doctests
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    36
19d212c948e0 fix up doctests
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    37
        >>> s1 = socket(AF_INET, SOCK_STREAM); s2 = socket(AF_INET, SOCK_STREAM)
19d212c948e0 fix up doctests
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    38
        >>> s1.listen(1);
19d212c948e0 fix up doctests
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    39
        >>> s2.connect(s1.getsockname())
19d212c948e0 fix up doctests
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    40
        >>> s12, s12_addr = s1.accept()
19d212c948e0 fix up doctests
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    41
        >>> s12_addr == s12.getpeername() == s2.getsockname()
19d212c948e0 fix up doctests
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    42
        True
19d212c948e0 fix up doctests
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    43
        >>> s1.close(); s2.close()
19d212c948e0 fix up doctests
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    44
6
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    """
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    cdef readonly socket_t fd
10bd48c9b6ce socket type, mass rename
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48