mirror of
https://github.com/jialexd/sdk-ameba-v4.0c_180328.git
synced 2025-07-31 12:41:05 +00:00
first add sdk
This commit is contained in:
commit
f91efd1250
3915 changed files with 1291882 additions and 0 deletions
56
component/common/example/nonblock_connect/example_nonblock_connect.c
Executable file
56
component/common/example/nonblock_connect/example_nonblock_connect.c
Executable file
|
|
@ -0,0 +1,56 @@
|
|||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include <platform/platform_stdlib.h>
|
||||
#include <lwip/sockets.h>
|
||||
|
||||
#define SERVER_IP "192.168.13.1"
|
||||
#define SERVER_PORT 80
|
||||
|
||||
// Need to define ERRNO in lwipopts.h
|
||||
int errno = 0;
|
||||
|
||||
static void example_nonblock_connect_thread(void *param)
|
||||
{
|
||||
int server_fd = -1;
|
||||
struct sockaddr_in server_addr;
|
||||
|
||||
// Delay to wait for IP by DHCP
|
||||
vTaskDelay(10000);
|
||||
printf("\nExample: Non-blocking socket connect\n");
|
||||
|
||||
server_fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
fcntl(server_fd, F_SETFL, fcntl(server_fd, F_GETFL, 0) | O_NONBLOCK);
|
||||
|
||||
server_addr.sin_family = AF_INET;
|
||||
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
|
||||
server_addr.sin_port = htons(SERVER_PORT);
|
||||
connect(server_fd, (struct sockaddr *) &server_addr, sizeof(server_addr));
|
||||
|
||||
if(errno == EINPROGRESS) {
|
||||
fd_set wfds;
|
||||
struct timeval time_out;
|
||||
|
||||
time_out.tv_sec = 3; // Set select timeout of 3 seconds
|
||||
time_out.tv_usec = 0;
|
||||
FD_ZERO(&wfds) ;
|
||||
FD_SET(server_fd, &wfds); // Only set server fd
|
||||
|
||||
// Use select to wait for non-blocking connect
|
||||
if(select(server_fd + 1, NULL, &wfds, NULL, &time_out) == 1)
|
||||
printf("Server connection successful\n");
|
||||
else
|
||||
printf("Server connection failed\n");
|
||||
}
|
||||
else {
|
||||
printf("ERROR: connect\n");
|
||||
}
|
||||
|
||||
close(server_fd);
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
void example_nonblock_connect(void)
|
||||
{
|
||||
if(xTaskCreate(example_nonblock_connect_thread, ((const char*)"example_nonblock_connect_thread"), 1024, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS)
|
||||
printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue