Modified wrapper for UDP socket allowing broadcast packets using the new network stack.

Committer:
innovodesign
Date:
Fri Jan 04 18:09:53 2013 +0000
Revision:
0:45f2ef9eadb6
Modified UDP socket wrapper for new network stack, allowing broadcast packets.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
innovodesign 0:45f2ef9eadb6 1 /*
innovodesign 0:45f2ef9eadb6 2 * UDPBroadcastSocket accept socket option flags parameter on bind or init
innovodesign 0:45f2ef9eadb6 3 * usage
innovodesign 0:45f2ef9eadb6 4 * mySocket.init(SO_BROADCAST); (not tested)
innovodesign 0:45f2ef9eadb6 5 * or mySocket.bind(port,SO_BROADCAST); {tested, ok)
innovodesign 0:45f2ef9eadb6 6
innovodesign 0:45f2ef9eadb6 7 * UDPBroadcastSocket accept socket option flags
innovodesign 0:45f2ef9eadb6 8 * These option flags per-socket from lwip\core\include\lwip\sockets.h
innovodesign 0:45f2ef9eadb6 9 */
innovodesign 0:45f2ef9eadb6 10 //#define SO_DEBUG 0x0001 /* Unimplemented: turn on debugging info recording */
innovodesign 0:45f2ef9eadb6 11 //#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
innovodesign 0:45f2ef9eadb6 12 //#define SO_REUSEADDR 0x0004 /* Allow local address reuse */
innovodesign 0:45f2ef9eadb6 13 //#define SO_KEEPALIVE 0x0008 /* keep connections alive */
innovodesign 0:45f2ef9eadb6 14 //#define SO_DONTROUTE 0x0010 /* Unimplemented: just use interface addresses */
innovodesign 0:45f2ef9eadb6 15 //#define SO_BROADCAST 0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */
innovodesign 0:45f2ef9eadb6 16 //#define SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */
innovodesign 0:45f2ef9eadb6 17 //#define SO_LINGER 0x0080 /* linger on close if data present */
innovodesign 0:45f2ef9eadb6 18 //#define SO_OOBINLINE 0x0100 /* Unimplemented: leave received OOB data in line */
innovodesign 0:45f2ef9eadb6 19 //#define SO_REUSEPORT 0x0200 /* Unimplemented: allow local address & port reuse */
innovodesign 0:45f2ef9eadb6 20
innovodesign 0:45f2ef9eadb6 21 #include "udpBroadcastSocket.h"
innovodesign 0:45f2ef9eadb6 22 #include "Socket/UDPSocket.h"
innovodesign 0:45f2ef9eadb6 23
innovodesign 0:45f2ef9eadb6 24 #include <cstring>
innovodesign 0:45f2ef9eadb6 25
innovodesign 0:45f2ef9eadb6 26 using std::memset;
innovodesign 0:45f2ef9eadb6 27
innovodesign 0:45f2ef9eadb6 28 int UDPBroadcastSocket::init(int optionFlags) {
innovodesign 0:45f2ef9eadb6 29 int option = 1;
innovodesign 0:45f2ef9eadb6 30 if (init_socket(SOCK_DGRAM)<0)
innovodesign 0:45f2ef9eadb6 31 return -1;
innovodesign 0:45f2ef9eadb6 32 else
innovodesign 0:45f2ef9eadb6 33 return lwip_setsockopt(_sock_fd,SOL_SOCKET,optionFlags,(char*)&option,sizeof(option));
innovodesign 0:45f2ef9eadb6 34 }
innovodesign 0:45f2ef9eadb6 35
innovodesign 0:45f2ef9eadb6 36 int UDPBroadcastSocket::bind(int port,int optionFlags)
innovodesign 0:45f2ef9eadb6 37 {
innovodesign 0:45f2ef9eadb6 38 int option = 1;
innovodesign 0:45f2ef9eadb6 39 if (UDPSocket::bind(port)<0)
innovodesign 0:45f2ef9eadb6 40 return -1;
innovodesign 0:45f2ef9eadb6 41 else
innovodesign 0:45f2ef9eadb6 42 return lwip_setsockopt(_sock_fd,SOL_SOCKET,optionFlags,(char*)&option,sizeof(option));
innovodesign 0:45f2ef9eadb6 43 }