|
30 | 30 | #include <stdio.h>
|
31 | 31 | #include <string.h>
|
32 | 32 |
|
33 |
| -#include "shared/runtime/context_manager_helpers.h" |
34 |
| -#include "py/objtuple.h" |
| 33 | +#include "py/mperrno.h" |
35 | 34 | #include "py/objlist.h"
|
| 35 | +#include "py/objtuple.h" |
36 | 36 | #include "py/runtime.h"
|
37 |
| -#include "py/mperrno.h" |
| 37 | +#include "py/stream.h" |
38 | 38 |
|
39 | 39 | #include "shared/netutils/netutils.h"
|
| 40 | +#include "shared/runtime/context_manager_helpers.h" |
40 | 41 | #include "shared/runtime/interrupt_char.h"
|
41 | 42 |
|
42 | 43 | //| class Socket:
|
@@ -422,12 +423,38 @@ STATIC const mp_rom_map_elem_t socketpool_socket_locals_dict_table[] = {
|
422 | 423 |
|
423 | 424 | STATIC MP_DEFINE_CONST_DICT(socketpool_socket_locals_dict, socketpool_socket_locals_dict_table);
|
424 | 425 |
|
| 426 | +STATIC mp_uint_t socket_ioctl(mp_obj_t self_in, mp_uint_t request, mp_uint_t arg, int *errcode) { |
| 427 | + socketpool_socket_obj_t *self = MP_OBJ_TO_PTR(self_in); |
| 428 | + mp_uint_t ret; |
| 429 | + if (request == MP_STREAM_POLL) { |
| 430 | + mp_uint_t flags = arg; |
| 431 | + ret = 0; |
| 432 | + if ((flags & MP_STREAM_POLL_RD) && common_hal_socketpool_readable(self) > 0) { |
| 433 | + ret |= MP_STREAM_POLL_RD; |
| 434 | + } |
| 435 | + if ((flags & MP_STREAM_POLL_WR) && common_hal_socketpool_writable(self)) { |
| 436 | + ret |= MP_STREAM_POLL_WR; |
| 437 | + } |
| 438 | + } else { |
| 439 | + *errcode = MP_EINVAL; |
| 440 | + ret = MP_STREAM_ERROR; |
| 441 | + } |
| 442 | + return ret; |
| 443 | +} |
| 444 | + |
| 445 | +STATIC const mp_stream_p_t socket_stream_p = { |
| 446 | + MP_PROTO_IMPLEMENT(MP_QSTR_protocol_stream) |
| 447 | + .ioctl = socket_ioctl, |
| 448 | + .is_text = false, |
| 449 | +}; |
| 450 | + |
425 | 451 | const mp_obj_type_t socketpool_socket_type = {
|
426 | 452 | { &mp_type_type },
|
427 | 453 | .flags = MP_TYPE_FLAG_EXTENDED,
|
428 | 454 | .name = MP_QSTR_Socket,
|
429 | 455 | .locals_dict = (mp_obj_dict_t *)&socketpool_socket_locals_dict,
|
430 | 456 | MP_TYPE_EXTENDED_FIELDS(
|
431 | 457 | .unary_op = mp_generic_unary_op,
|
| 458 | + .protocol = &socket_stream_p, |
432 | 459 | )
|
433 | 460 | };
|
0 commit comments