Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:45f2ef9eadb6, committed 2013-01-04
- Comitter:
- innovodesign
- Date:
- Fri Jan 04 18:09:53 2013 +0000
- Commit message:
- Modified UDP socket wrapper for new network stack, allowing broadcast packets.
Changed in this revision
| udpBroadcastSocket.cpp | Show annotated file Show diff for this revision Revisions of this file |
| udpBroadcastSocket.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 45f2ef9eadb6 udpBroadcastSocket.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/udpBroadcastSocket.cpp Fri Jan 04 18:09:53 2013 +0000
@@ -0,0 +1,43 @@
+/*
+ * UDPBroadcastSocket accept socket option flags parameter on bind or init
+ * usage
+ * mySocket.init(SO_BROADCAST); (not tested)
+ * or mySocket.bind(port,SO_BROADCAST); {tested, ok)
+
+ * UDPBroadcastSocket accept socket option flags
+ * These option flags per-socket from lwip\core\include\lwip\sockets.h
+ */
+//#define SO_DEBUG 0x0001 /* Unimplemented: turn on debugging info recording */
+//#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
+//#define SO_REUSEADDR 0x0004 /* Allow local address reuse */
+//#define SO_KEEPALIVE 0x0008 /* keep connections alive */
+//#define SO_DONTROUTE 0x0010 /* Unimplemented: just use interface addresses */
+//#define SO_BROADCAST 0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */
+//#define SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */
+//#define SO_LINGER 0x0080 /* linger on close if data present */
+//#define SO_OOBINLINE 0x0100 /* Unimplemented: leave received OOB data in line */
+//#define SO_REUSEPORT 0x0200 /* Unimplemented: allow local address & port reuse */
+
+#include "udpBroadcastSocket.h"
+#include "Socket/UDPSocket.h"
+
+#include <cstring>
+
+using std::memset;
+
+int UDPBroadcastSocket::init(int optionFlags) {
+ int option = 1;
+ if (init_socket(SOCK_DGRAM)<0)
+ return -1;
+ else
+ return lwip_setsockopt(_sock_fd,SOL_SOCKET,optionFlags,(char*)&option,sizeof(option));
+}
+
+int UDPBroadcastSocket::bind(int port,int optionFlags)
+{
+ int option = 1;
+ if (UDPSocket::bind(port)<0)
+ return -1;
+ else
+ return lwip_setsockopt(_sock_fd,SOL_SOCKET,optionFlags,(char*)&option,sizeof(option));
+}
\ No newline at end of file
diff -r 000000000000 -r 45f2ef9eadb6 udpBroadcastSocket.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/udpBroadcastSocket.h Fri Jan 04 18:09:53 2013 +0000
@@ -0,0 +1,20 @@
+#ifndef UDPBROADCASTSOCKET_H
+#define UDPBROADCASTSOCKET_H
+
+#include "Socket/UDPSocket.h"
+#include <cstdint>
+
+/**
+UDP Broadcast Socket
+ // Allows one-to-many communication over ethernet
+ // Override an UDP Socket with additional flag
+ // when initing or binding a port use init(SO_BROADCAST) or bind(port,SO_BROADCAST) respectively.
+ // Note multicasting many be more suitable for some applications, but isn't support by this socket.
+*/
+class UDPBroadcastSocket : public UDPSocket {
+
+public:
+ int init(int optionFlags);
+ int bind(int port,int optionFlags);
+};
+#endif
\ No newline at end of file