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.
UDPSocket.h
00001 00002 /** \addtogroup netsocket */ 00003 /** @{*/ 00004 /* UDPSocket 00005 * Copyright (c) 2015 ARM Limited 00006 * 00007 * Licensed under the Apache License, Version 2.0 (the "License"); 00008 * you may not use this file except in compliance with the License. 00009 * You may obtain a copy of the License at 00010 * 00011 * http://www.apache.org/licenses/LICENSE-2.0 00012 * 00013 * Unless required by applicable law or agreed to in writing, software 00014 * distributed under the License is distributed on an "AS IS" BASIS, 00015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00016 * See the License for the specific language governing permissions and 00017 * limitations under the License. 00018 */ 00019 00020 #ifndef UDPSOCKET_H 00021 #define UDPSOCKET_H 00022 00023 #include "netsocket/Socket.h" 00024 #include "netsocket/NetworkStack.h" 00025 #include "netsocket/NetworkInterface.h" 00026 #include "rtos/Semaphore.h" 00027 00028 00029 /** UDP socket 00030 */ 00031 class UDPSocket : public Socket { 00032 public: 00033 /** Create an uninitialized socket 00034 * 00035 * Must call open to initialize the socket on a network stack. 00036 */ 00037 UDPSocket(); 00038 00039 /** Create a socket on a network interface 00040 * 00041 * Creates and opens a socket on the network stack of the given 00042 * network interface. 00043 * 00044 * @param stack Network stack as target for socket 00045 */ 00046 template <typename S> 00047 UDPSocket(S *stack) 00048 : _pending(0), _read_sem(0), _write_sem(0), 00049 _read_in_progress(false), _write_in_progress(false) 00050 { 00051 open(stack); 00052 } 00053 00054 /** Destroy a socket 00055 * 00056 * Closes socket if the socket is still open 00057 */ 00058 virtual ~UDPSocket(); 00059 00060 /** Send a packet over a UDP socket 00061 * 00062 * Sends data to the specified address specified by either a domain name 00063 * or an IP address and port. Returns the number of bytes sent from the 00064 * buffer. 00065 * 00066 * By default, sendto blocks until data is sent. If socket is set to 00067 * non-blocking or times out, NSAPI_ERROR_WOULD_BLOCK is returned 00068 * immediately. 00069 * 00070 * @param host Hostname of the remote host 00071 * @param port Port of the remote host 00072 * @param data Buffer of data to send to the host 00073 * @param size Size of the buffer in bytes 00074 * @return Number of sent bytes on success, negative error 00075 * code on failure 00076 */ 00077 int sendto(const char *host, uint16_t port, const void *data, unsigned size); 00078 00079 /** Send a packet over a UDP socket 00080 * 00081 * Sends data to the specified address. Returns the number of bytes 00082 * sent from the buffer. 00083 * 00084 * By default, sendto blocks until data is sent. If socket is set to 00085 * non-blocking or times out, NSAPI_ERROR_WOULD_BLOCK is returned 00086 * immediately. 00087 * 00088 * @param address The SocketAddress of the remote host 00089 * @param data Buffer of data to send to the host 00090 * @param size Size of the buffer in bytes 00091 * @return Number of sent bytes on success, negative error 00092 * code on failure 00093 */ 00094 int sendto(const SocketAddress &address, const void *data, unsigned size); 00095 00096 /** Receive a packet over a UDP socket 00097 * 00098 * Receives data and stores the source address in address if address 00099 * is not NULL. Returns the number of bytes received into the buffer. 00100 * 00101 * By default, recvfrom blocks until data is sent. If socket is set to 00102 * non-blocking or times out, NSAPI_ERROR_WOULD_BLOCK is returned 00103 * immediately. 00104 * 00105 * @param address Destination for the source address or NULL 00106 * @param data Destination buffer for data received from the host 00107 * @param size Size of the buffer in bytes 00108 * @return Number of received bytes on success, negative error 00109 * code on failure 00110 */ 00111 int recvfrom(SocketAddress *address, void *data, unsigned size); 00112 00113 protected: 00114 virtual nsapi_protocol_t get_proto(); 00115 virtual void event(); 00116 00117 volatile unsigned _pending; 00118 rtos::Semaphore _read_sem; 00119 rtos::Semaphore _write_sem; 00120 bool _read_in_progress; 00121 bool _write_in_progress; 00122 }; 00123 00124 00125 #endif 00126 00127 /** @}*/
Generated on Tue Jul 12 2022 17:34:58 by
