summaryrefslogtreecommitdiff
path: root/shared-bindings/socketpool
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2020-08-25 16:15:45 -0700
committerScott Shawcroft <scott@tannewt.org>2020-08-25 16:15:45 -0700
commit380cbfba55e45f9f0d8ccae6c28c23b1ea93147f (patch)
treed20cc56a04f3d415c56f54875b7093cf0151cf92 /shared-bindings/socketpool
parentf3bc712539ec13e73fe2b809ee274df57dca5f46 (diff)
Add hash to Socket so it can be used in dicts
Diffstat (limited to 'shared-bindings/socketpool')
-rw-r--r--shared-bindings/socketpool/Socket.c18
-rw-r--r--shared-bindings/socketpool/Socket.h1
2 files changed, 17 insertions, 2 deletions
diff --git a/shared-bindings/socketpool/Socket.c b/shared-bindings/socketpool/Socket.c
index 932e8e856..250e9c874 100644
--- a/shared-bindings/socketpool/Socket.c
+++ b/shared-bindings/socketpool/Socket.c
@@ -267,8 +267,7 @@ STATIC mp_obj_t socketpool_socket_recv_into(size_t n_args, const mp_obj_t *args)
}
if (len == 0) {
- ESP_EARLY_LOGW(TAG, "len 0");
- mp_raise_OSError(0);
+ return MP_OBJ_NEW_SMALL_INT(0);
}
mp_int_t ret = common_hal_socketpool_socket_recv_into(self, (byte*)bufinfo.buf, len);
@@ -426,6 +425,20 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(socketpool_socket_settimeout_obj, socketpool_so
// }
// STATIC MP_DEFINE_CONST_FUN_OBJ_2(socketpool_socket_setblocking_obj, socketpool_socket_setblocking);
+//| def __hash__(self) -> int:
+//| """Returns a hash for the Socket."""
+//| ...
+//|
+STATIC mp_obj_t socketpool_socket_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
+ switch (op) {
+ case MP_UNARY_OP_HASH: {
+ return MP_OBJ_NEW_SMALL_INT(common_hal_socketpool_socket_get_hash(MP_OBJ_TO_PTR(self_in)));
+ }
+ default:
+ return MP_OBJ_NULL; // op not supported
+ }
+}
+
STATIC const mp_rom_map_elem_t socketpool_socket_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) },
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&socketpool_socket___exit___obj) },
@@ -451,4 +464,5 @@ const mp_obj_type_t socketpool_socket_type = {
{ &mp_type_type },
.name = MP_QSTR_Socket,
.locals_dict = (mp_obj_dict_t*)&socketpool_socket_locals_dict,
+ .unary_op = socketpool_socket_unary_op,
};
diff --git a/shared-bindings/socketpool/Socket.h b/shared-bindings/socketpool/Socket.h
index 4597aed38..f0be95c92 100644
--- a/shared-bindings/socketpool/Socket.h
+++ b/shared-bindings/socketpool/Socket.h
@@ -38,5 +38,6 @@ mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self,
void common_hal_socketpool_socket_close(socketpool_socket_obj_t* self);
bool common_hal_socketpool_socket_get_closed(socketpool_socket_obj_t* self);
bool common_hal_socketpool_socket_get_connected(socketpool_socket_obj_t* self);
+mp_uint_t common_hal_socketpool_socket_get_hash(socketpool_socket_obj_t* self);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_SOCKETPOOL_SOCKET_H