![](/media/cache/group/mbed-logo-square-512_3.png.50x50_q85.png)
An example how to make asynchronous DNS host name resolution.
main.cpp@0:d0f7d306a900, 2018-05-25 (annotated)
- Committer:
- mikaleppanen
- Date:
- Fri May 25 12:25:32 2018 +0000
- Revision:
- 0:d0f7d306a900
Example how to make asynchronous DNS get host by name operation
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mikaleppanen | 0:d0f7d306a900 | 1 | #include "mbed.h" |
mikaleppanen | 0:d0f7d306a900 | 2 | #include "nsapi_types.h" |
mikaleppanen | 0:d0f7d306a900 | 3 | #include "EthernetInterface.h" |
mikaleppanen | 0:d0f7d306a900 | 4 | #include "SocketAddress.h" |
mikaleppanen | 0:d0f7d306a900 | 5 | #include "Semaphore.h" |
mikaleppanen | 0:d0f7d306a900 | 6 | |
mikaleppanen | 0:d0f7d306a900 | 7 | rtos::Semaphore callback_semaphore; |
mikaleppanen | 0:d0f7d306a900 | 8 | SocketAddress address; |
mikaleppanen | 0:d0f7d306a900 | 9 | nsapi_error_t result; |
mikaleppanen | 0:d0f7d306a900 | 10 | |
mikaleppanen | 0:d0f7d306a900 | 11 | // Callback for asynchronous host name resolution |
mikaleppanen | 0:d0f7d306a900 | 12 | void hostbyname_callback(nsapi_error_t res, SocketAddress *addr) |
mikaleppanen | 0:d0f7d306a900 | 13 | { |
mikaleppanen | 0:d0f7d306a900 | 14 | // Store result and release semaphore |
mikaleppanen | 0:d0f7d306a900 | 15 | result = res; |
mikaleppanen | 0:d0f7d306a900 | 16 | address = *addr; |
mikaleppanen | 0:d0f7d306a900 | 17 | callback_semaphore.release(); |
mikaleppanen | 0:d0f7d306a900 | 18 | } |
mikaleppanen | 0:d0f7d306a900 | 19 | |
mikaleppanen | 0:d0f7d306a900 | 20 | int main() |
mikaleppanen | 0:d0f7d306a900 | 21 | { |
mikaleppanen | 0:d0f7d306a900 | 22 | // Initialise network interface |
mikaleppanen | 0:d0f7d306a900 | 23 | EthernetInterface eth; |
mikaleppanen | 0:d0f7d306a900 | 24 | eth.connect(); |
mikaleppanen | 0:d0f7d306a900 | 25 | |
mikaleppanen | 0:d0f7d306a900 | 26 | // Initiate asynchronous DNS host name resolution |
mikaleppanen | 0:d0f7d306a900 | 27 | eth.gethostbyname_async("www.mbed.com", hostbyname_callback); |
mikaleppanen | 0:d0f7d306a900 | 28 | |
mikaleppanen | 0:d0f7d306a900 | 29 | // Wait for callback semaphore |
mikaleppanen | 0:d0f7d306a900 | 30 | callback_semaphore.wait(); |
mikaleppanen | 0:d0f7d306a900 | 31 | |
mikaleppanen | 0:d0f7d306a900 | 32 | // Print result |
mikaleppanen | 0:d0f7d306a900 | 33 | printf("Result %s, Address %s\r\n", result == NSAPI_ERROR_OK ? "OK" : "FAIL", |
mikaleppanen | 0:d0f7d306a900 | 34 | result == NSAPI_ERROR_OK ? address.get_ip_address() : "NONE"); |
mikaleppanen | 0:d0f7d306a900 | 35 | |
mikaleppanen | 0:d0f7d306a900 | 36 | // Disconnect network interface |
mikaleppanen | 0:d0f7d306a900 | 37 | eth.disconnect(); |
mikaleppanen | 0:d0f7d306a900 | 38 | } |