@@ -130,6 +130,25 @@ STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
130
130
}
131
131
STATIC MP_DEFINE_CONST_FUN_OBJ_2 (socket_connect_obj , socket_connect );
132
132
133
+ STATIC mp_obj_t socket_send (mp_obj_t self_in , mp_obj_t buf_in ) {
134
+ socket_obj_t * socket = self_in ;
135
+ socket_check_closed (socket );
136
+
137
+ mp_buffer_info_t bufinfo ;
138
+ mp_get_buffer_raise (buf_in , & bufinfo , MP_BUFFER_READ );
139
+
140
+ struct net_buf * send_buf = net_nbuf_get_tx (socket -> ctx , K_FOREVER );
141
+ // TODO: Probably should limit how much data we send in one call still
142
+ if (!net_nbuf_append (send_buf , bufinfo .len , bufinfo .buf , K_FOREVER )) {
143
+ mp_raise_OSError (ENOSPC );
144
+ }
145
+
146
+ RAISE_ERRNO (net_context_send (send_buf , /*cb*/ NULL , K_FOREVER , NULL , NULL ));
147
+
148
+ return mp_obj_new_int_from_uint (bufinfo .len );
149
+ }
150
+ STATIC MP_DEFINE_CONST_FUN_OBJ_2 (socket_send_obj , socket_send );
151
+
133
152
STATIC mp_obj_t socket_close (mp_obj_t self_in ) {
134
153
socket_obj_t * socket = self_in ;
135
154
if (socket -> ctx != NULL ) {
@@ -145,6 +164,7 @@ STATIC const mp_map_elem_t socket_locals_dict_table[] = {
145
164
{ MP_OBJ_NEW_QSTR (MP_QSTR_close ), (mp_obj_t )& socket_close_obj },
146
165
{ MP_OBJ_NEW_QSTR (MP_QSTR_bind ), (mp_obj_t )& socket_bind_obj },
147
166
{ MP_OBJ_NEW_QSTR (MP_QSTR_connect ), (mp_obj_t )& socket_connect_obj },
167
+ { MP_OBJ_NEW_QSTR (MP_QSTR_send ), (mp_obj_t )& socket_send_obj },
148
168
};
149
169
STATIC MP_DEFINE_CONST_DICT (socket_locals_dict , socket_locals_dict_table );
150
170
0 commit comments