summaryrefslogtreecommitdiff
path: root/zephyr/modusocket.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-04-08 00:30:17 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-04-08 00:30:17 +0300
commit96166ec16526e8cbb3a18df478da68fe5d8208ee (patch)
tree245acf2536d603ef50543e5a12a5fa5cfae40cb6 /zephyr/modusocket.c
parentf1c0676a70c771abb6e319a0ec2708740a2bf222 (diff)
zephyr/modusocket: socket_bind: Don't set recv callback on STREAM sockets.
For stream sockets, next exected operation is listen().
Diffstat (limited to 'zephyr/modusocket.c')
-rw-r--r--zephyr/modusocket.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/zephyr/modusocket.c b/zephyr/modusocket.c
index 6dd257266..7898f5576 100644
--- a/zephyr/modusocket.c
+++ b/zephyr/modusocket.c
@@ -224,8 +224,13 @@ STATIC mp_obj_t socket_bind(mp_obj_t self_in, mp_obj_t addr_in) {
parse_inet_addr(socket, addr_in, &sockaddr);
RAISE_ERRNO(net_context_bind(socket->ctx, &sockaddr, sizeof(sockaddr)));
- DEBUG_printf("Setting recv cb after bind\n");
- RAISE_ERRNO(net_context_recv(socket->ctx, sock_received_cb, K_NO_WAIT, socket));
+ // For DGRAM socket, we expect to receive packets after call to bind(),
+ // but for STREAM socket, next expected operation is listen(), which
+ // doesn't work if recv callback is set.
+ if (net_context_get_type(socket->ctx) == SOCK_DGRAM) {
+ DEBUG_printf("Setting recv cb after bind\n");
+ RAISE_ERRNO(net_context_recv(socket->ctx, sock_received_cb, K_NO_WAIT, socket));
+ }
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_bind_obj, socket_bind);