From dd1cd5e491c2412f7bce9d05cda1ead803ad5776 Mon Sep 17 00:00:00 2001 From: fbernon Date: Thu, 28 Jun 2007 09:56:37 +0000 Subject: [PATCH] sockets.c: process NETCONN_RAW connections with LWIP_TCPIP_CORE_LOCKING=1 --- src/api/sockets.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/api/sockets.c b/src/api/sockets.c index 1aa93841..4107b2dd 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -547,7 +547,7 @@ lwip_sendto(int s, const void *data, int size, unsigned int flags, sock_set_errno(sock, err_to_errno(ERR_ARG)); return -1;); #if LWIP_TCPIP_CORE_LOCKING - /* Should only be consider like a sample or a simple way to experiment this option (no check of "to" field, no RAW send/sendto...) */ + /* Should only be consider like a sample or a simple way to experiment this option (no check of "to" field...) */ { struct pbuf* p; p = pbuf_alloc(PBUF_TRANSPORT, 0, PBUF_REF); @@ -560,7 +560,11 @@ lwip_sendto(int s, const void *data, int size, unsigned int flags, remote_addr.addr = ((struct sockaddr_in *)to)->sin_addr.s_addr; LOCK_TCPIP_CORE(); - err = sock->conn->err = udp_sendto(sock->conn->pcb.udp, p, &remote_addr, ntohs(((struct sockaddr_in *)to)->sin_port)); + if (sock->conn->type==NETCONN_RAW) { + err = sock->conn->err = raw_sendto(sock->conn->pcb.raw, p, &remote_addr); + } else { + err = sock->conn->err = udp_sendto(sock->conn->pcb.udp, p, &remote_addr, ntohs(((struct sockaddr_in *)to)->sin_port)); + } UNLOCK_TCPIP_CORE(); pbuf_free(p);