Skip to content

Commit

Permalink
Start using high-performance uv_udp_t handle again
Browse files Browse the repository at this point in the history
* Upgrade to libuv v1.28.0.  This is the new minimal supported
  libuv version.

* Switch from using uv_poll_t to uv_udp_t.  This leads to
  significant performance improvements.
  • Loading branch information
1st1 committed Apr 16, 2019
1 parent e3b00b8 commit c2b65bc
Show file tree
Hide file tree
Showing 8 changed files with 501 additions and 247 deletions.
19 changes: 18 additions & 1 deletion uvloop/dns.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ cdef __convert_pyaddr_to_sockaddr(int family, object addr,
int addr_len
int scope_id = 0
int flowinfo = 0
char *buf
Py_ssize_t buflen

if family == uv.AF_INET:
if not isinstance(addr, tuple):
Expand Down Expand Up @@ -126,9 +128,24 @@ cdef __convert_pyaddr_to_sockaddr(int family, object addr,
(<system.sockaddr_in6*>res).sin6_flowinfo = flowinfo
(<system.sockaddr_in6*>res).sin6_scope_id = scope_id

elif family == uv.AF_UNIX:
if isinstance(addr, str):
addr = addr.encode(sys_getfilesystemencoding())
elif not isinstance(addr, bytes):
raise TypeError('AF_UNIX address must be a str or a bytes object')

PyBytes_AsStringAndSize(addr, &buf, &buflen)
if buflen > 107:
raise ValueError(
f'unix socket path {addr!r} is longer than 107 characters')

memset(res, 0, sizeof(system.sockaddr_un))
(<system.sockaddr_un*>res).sun_family = uv.AF_UNIX
memcpy((<system.sockaddr_un*>res).sun_path, buf, buflen)

else:
raise ValueError(
'epected AF_INET or AF_INET6 family, got {}'.format(family))
f'epected AF_INET, AF_INET6, or AF_UNIX family, got {family}')

This comment has been minimized.

Copy link
@jparise

jparise Apr 25, 2019

"expected"

This comment has been minimized.

Copy link
@1st1

1st1 Apr 25, 2019

Author Member

Thanks!



cdef __static_getaddrinfo(object host, object port,
Expand Down
27 changes: 15 additions & 12 deletions uvloop/handles/udp.pxd
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
cdef class UDPTransport(UVBaseTransport):
cdef:
object sock
int sock_family
int sock_proto
int sock_type
UVPoll poll
object address
object buffer
bint __receiving
int _family

cdef _init(self, Loop loop, object sock, object r_addr)
cdef _init(self, Loop loop, unsigned int family)

cdef _on_read_ready(self)
cdef _on_write_ready(self)
cdef _connect(self, system.sockaddr* addr, size_t addr_len)

@staticmethod
cdef UDPTransport new(Loop loop, object sock, object r_addr)
cdef _bind(self, system.sockaddr* addr, bint reuse_addr)
cdef open(self, int family, int sockfd)
cdef _set_broadcast(self, bint on)

cdef inline __receiving_started(self)
cdef inline __receiving_stopped(self)

cdef _send(self, object data, object addr)

cdef _on_receive(self, bytes data, object exc, object addr)
cdef _on_sent(self, object exc)
Loading

0 comments on commit c2b65bc

Please sign in to comment.