extmod/modusocket: Add read/write stream methods to socket object.
Following other socket implementations.
This commit is contained in:
parent
e7429389a6
commit
c13e25c329
@ -362,10 +362,41 @@ STATIC const mp_rom_map_elem_t socket_locals_dict_table[] = {
|
|||||||
{ MP_ROM_QSTR(MP_QSTR_setsockopt), MP_ROM_PTR(&socket_setsockopt_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_setsockopt), MP_ROM_PTR(&socket_setsockopt_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_settimeout), MP_ROM_PTR(&socket_settimeout_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_settimeout), MP_ROM_PTR(&socket_settimeout_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_setblocking), MP_ROM_PTR(&socket_setblocking_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_setblocking), MP_ROM_PTR(&socket_setblocking_obj) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&mp_stream_read_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_readinto), MP_ROM_PTR(&mp_stream_readinto_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_readline), MP_ROM_PTR(&mp_stream_unbuffered_readline_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mp_stream_write_obj) },
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC MP_DEFINE_CONST_DICT(socket_locals_dict, socket_locals_dict_table);
|
STATIC MP_DEFINE_CONST_DICT(socket_locals_dict, socket_locals_dict_table);
|
||||||
|
|
||||||
|
mp_uint_t socket_read(mp_obj_t self_in, void *buf, mp_uint_t size, int *errcode) {
|
||||||
|
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
if (self->nic == MP_OBJ_NULL) {
|
||||||
|
return MP_STREAM_ERROR;
|
||||||
|
}
|
||||||
|
mp_int_t ret = self->nic_type->recv(self, (byte *)buf, size, errcode);
|
||||||
|
if (ret < 0) {
|
||||||
|
ret = MP_STREAM_ERROR;
|
||||||
|
*errcode = -(*errcode); // expects a positive error code
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
mp_uint_t socket_write(mp_obj_t self_in, const void *buf, mp_uint_t size, int *errcode) {
|
||||||
|
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
if (self->nic == MP_OBJ_NULL) {
|
||||||
|
return MP_STREAM_ERROR;
|
||||||
|
}
|
||||||
|
mp_int_t ret = self->nic_type->send(self, buf, size, errcode);
|
||||||
|
if (ret < 0) {
|
||||||
|
ret = MP_STREAM_ERROR;
|
||||||
|
*errcode = -(*errcode); // expects a positive error code
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
mp_uint_t socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_t arg, int *errcode) {
|
mp_uint_t socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_t arg, int *errcode) {
|
||||||
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
mod_network_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
if (request == MP_STREAM_CLOSE) {
|
if (request == MP_STREAM_CLOSE) {
|
||||||
@ -386,6 +417,8 @@ mp_uint_t socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_t arg, int *
|
|||||||
}
|
}
|
||||||
|
|
||||||
STATIC const mp_stream_p_t socket_stream_p = {
|
STATIC const mp_stream_p_t socket_stream_p = {
|
||||||
|
.read = socket_read,
|
||||||
|
.write = socket_write,
|
||||||
.ioctl = socket_ioctl,
|
.ioctl = socket_ioctl,
|
||||||
.is_text = false,
|
.is_text = false,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user