Modified wrapper for UDP socket allowing broadcast packets using the new network stack.
udpBroadcastSocket.cpp@0:45f2ef9eadb6, 2013-01-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |