pure sdk for main
This commit is contained in:
@@ -0,0 +1,621 @@
|
||||
#include "socket_module.h"
|
||||
#include "lib/net/eloop/eloop.h"
|
||||
#include "typesdef.h"
|
||||
#include "lwip/api.h"
|
||||
#include "lwip/sockets.h"
|
||||
#include "event.h"
|
||||
#include "osal/string.h"
|
||||
|
||||
|
||||
#define UDP_RCV_SIZE 1460
|
||||
#define UDP_SND_SIZE UDP_RCV_SIZE
|
||||
|
||||
static uint8_t speedTest_buf[UDP_RCV_SIZE];
|
||||
|
||||
//udp定时发送结构
|
||||
struct UdpSpeed
|
||||
{
|
||||
struct sockaddr_in remote_addr;
|
||||
struct event *timer_e;
|
||||
struct event *udp_e;
|
||||
int fd;
|
||||
};
|
||||
|
||||
|
||||
|
||||
static void udp_speed_test(int fd)
|
||||
{
|
||||
int len;
|
||||
unsigned char *udp_data;
|
||||
struct sockaddr remote_addr;
|
||||
int retval;
|
||||
int ret;
|
||||
uint64 time_if;
|
||||
int len_total = 0;
|
||||
uint8_t *pt;
|
||||
uint8_t type_eloop = 0;
|
||||
|
||||
retval = 16;
|
||||
|
||||
udp_data = (unsigned char*)malloc(UDP_RCV_SIZE );
|
||||
time_if = os_jiffies();
|
||||
printf("udp_test_bandwidth start...\n");
|
||||
while(1){
|
||||
//len = sendto(send_socket_fd, (unsigned char *)udp_data, UDP_XMIT_SIZE, 0, &udp_remote_client, sizeof(struct sockaddr));
|
||||
type_eloop = 0;
|
||||
printf("test recv\r\n");
|
||||
while(type_eloop < 10){
|
||||
len = recvfrom(fd, udp_data, UDP_RCV_SIZE, MSG_WAITALL, &remote_addr, (socklen_t*)&retval);
|
||||
len_total += len;
|
||||
if((os_jiffies() - time_if) > 2000){
|
||||
printf("recvfrom loop:%d\r\n",type_eloop);
|
||||
type_eloop++;
|
||||
time_if = os_jiffies();
|
||||
pt = (uint8_t*)&len_total;
|
||||
udp_data[0] = pt[0]&0x0f;
|
||||
udp_data[1] = (pt[0]>>4)&0x0f;
|
||||
udp_data[2] = pt[1]&0x0f;
|
||||
udp_data[3] = (pt[1]>>4)&0x0f;
|
||||
udp_data[4] = pt[2]&0x0f;
|
||||
udp_data[5] = (pt[2]>>4)&0x0f;
|
||||
udp_data[6] = pt[3]&0x0f;
|
||||
udp_data[7] = (pt[3]>>4)&0x0f;
|
||||
udp_data[8] = 100;
|
||||
printf("len_total::%x %x%x%x%x\r\n",len_total,udp_data[0],udp_data[1],udp_data[2],udp_data[3]);
|
||||
do{
|
||||
ret = sendto(fd, (unsigned char *)udp_data, 12, 0, &remote_addr, sizeof(struct sockaddr));
|
||||
}while(ret<0);
|
||||
|
||||
do{
|
||||
ret = sendto(fd, (unsigned char *)udp_data, 12, 0, &remote_addr, sizeof(struct sockaddr));
|
||||
}while(ret<0);
|
||||
|
||||
do{
|
||||
ret = sendto(fd, (unsigned char *)udp_data, 12, 0, &remote_addr, sizeof(struct sockaddr));
|
||||
}while(ret<0);
|
||||
|
||||
len_total = 0;
|
||||
}
|
||||
}
|
||||
printf("test send\r\n");
|
||||
|
||||
time_if = os_jiffies();
|
||||
//for(type_eloop = 0;type_eloop < 10;type_eloop++)
|
||||
//{
|
||||
type_eloop = 0;
|
||||
while(type_eloop < 10){
|
||||
udp_data[8] = 101;
|
||||
sendto(fd, (unsigned char *)udp_data, UDP_RCV_SIZE, 0, &remote_addr, sizeof(struct sockaddr));
|
||||
if((os_jiffies() - time_if) > 2000){
|
||||
|
||||
printf("sendto loop:%d\r\n",type_eloop);
|
||||
time_if = os_jiffies();
|
||||
type_eloop++;
|
||||
udp_data[8] = 102;
|
||||
do{
|
||||
ret = sendto(fd, (unsigned char *)udp_data, 12, 0, &remote_addr, sizeof(struct sockaddr));
|
||||
}while(ret<0);
|
||||
}
|
||||
|
||||
}
|
||||
//}
|
||||
udp_data[8] = 103;
|
||||
|
||||
do{
|
||||
ret = sendto(fd, (unsigned char *)udp_data, 12, 0, &remote_addr, sizeof(struct sockaddr));
|
||||
}while(ret<0);
|
||||
do{
|
||||
ret = sendto(fd, (unsigned char *)udp_data, 12, 0, &remote_addr, sizeof(struct sockaddr));
|
||||
}while(ret<0);
|
||||
do{
|
||||
ret = sendto(fd, (unsigned char *)udp_data, 12, 0, &remote_addr, sizeof(struct sockaddr));
|
||||
}while(ret<0);
|
||||
}
|
||||
|
||||
printf("\n\n\n [ENTER] %s, Line = %d \n\n\n",__func__, __LINE__);
|
||||
}
|
||||
|
||||
|
||||
static void udp_server_speed_accept(struct event_info *e, void *d)
|
||||
{
|
||||
char *tcp_rcv_buff;
|
||||
struct sockaddr remote_addr;
|
||||
int retval, size;
|
||||
retval = 16;
|
||||
int udp_server_fd = (int)d;
|
||||
|
||||
tcp_rcv_buff = (char*)malloc(UDP_RCV_SIZE + 4);
|
||||
|
||||
printf("udp server fd: %d\n", udp_server_fd);
|
||||
size = recvfrom(udp_server_fd, tcp_rcv_buff, UDP_RCV_SIZE, MSG_DONTWAIT, &remote_addr, (socklen_t*)&retval);
|
||||
printf("size:%d %s\n",size,tcp_rcv_buff);
|
||||
printf("udp client ip: %x\n", ((struct sockaddr_in *)&remote_addr)->sin_addr.s_addr);
|
||||
if(size > 0) {
|
||||
udp_speed_test(udp_server_fd);
|
||||
}
|
||||
|
||||
free(tcp_rcv_buff);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void udp_client_speed_send(struct event_info *e, void *d)
|
||||
{
|
||||
static char *send_buf = NULL;
|
||||
int size;
|
||||
if(!send_buf)
|
||||
{
|
||||
send_buf = (char*)malloc(UDP_RCV_SIZE);
|
||||
memset(send_buf,0,UDP_RCV_SIZE);
|
||||
}
|
||||
uint32_t sec, usec,spcount;
|
||||
static uint32_t pcount = 0;
|
||||
++pcount;
|
||||
uint64 times = os_jiffies();
|
||||
sec = times/1000;
|
||||
|
||||
sec = htonl(times/1000);
|
||||
usec = htonl((times%1000)*1000);
|
||||
spcount = htonl(pcount);
|
||||
|
||||
|
||||
memcpy(send_buf, &spcount, sizeof(spcount));
|
||||
memcpy(send_buf+4, &sec, sizeof(sec));
|
||||
memcpy(send_buf+8, &usec, sizeof(usec));
|
||||
|
||||
|
||||
|
||||
|
||||
struct UdpSpeed *udp_struct = (struct UdpSpeed *)d;
|
||||
struct sockaddr *remote_addr = (struct sockaddr*)&udp_struct->remote_addr;
|
||||
int udp_client_fd = (int)udp_struct->fd;
|
||||
size = sendto(udp_client_fd, (unsigned char *)send_buf, UDP_RCV_SIZE, 0, remote_addr, sizeof(struct sockaddr));
|
||||
if(size < 0)
|
||||
{
|
||||
pcount--;
|
||||
}
|
||||
}
|
||||
|
||||
void udp_client_speed_recv(struct event_info *e, void *d)
|
||||
{
|
||||
static char *send_buf = NULL;
|
||||
int size;
|
||||
if(!send_buf)
|
||||
{
|
||||
send_buf = (char*)malloc(UDP_RCV_SIZE);
|
||||
memset(send_buf,0,UDP_RCV_SIZE);
|
||||
}
|
||||
struct sockaddr remote_addr;
|
||||
int retval;
|
||||
retval = 16;
|
||||
|
||||
struct UdpSpeed *udp_struct = (struct UdpSpeed *)d;
|
||||
int udp_client_fd = (int)udp_struct->fd;
|
||||
size = recvfrom(udp_client_fd, send_buf, UDP_RCV_SIZE, MSG_DONTWAIT, &remote_addr, (socklen_t*)&retval);
|
||||
if(size > 0)
|
||||
{
|
||||
printf("................................size:%d\tsendbuf[0]:%X\n",size,send_buf[0]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
void speedTest_udp_server(int port)
|
||||
{
|
||||
|
||||
int udp_server_fd;
|
||||
//uint16_t port = 8060;
|
||||
|
||||
printf("> init udp server\nudp port:%d\n", port);
|
||||
|
||||
udp_server_fd = creat_udp_socket(port);
|
||||
eloop_add_fd( udp_server_fd, EVENT_READ, EVENT_F_ENABLED, (void*)udp_server_speed_accept, (void*)udp_server_fd );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void speedTest_udp_client(const char *ip,int port)
|
||||
{
|
||||
int udp_client_fd;
|
||||
udp_client_fd = creat_udp_socket(0);
|
||||
struct UdpSpeed *udp_struct = (struct UdpSpeed*)malloc(sizeof(struct UdpSpeed));
|
||||
struct sockaddr_in *addrServer = &udp_struct->remote_addr;
|
||||
memset(addrServer,0,sizeof(struct sockaddr_in));
|
||||
addrServer->sin_family=AF_INET;
|
||||
addrServer->sin_addr.s_addr=inet_addr(ip);
|
||||
addrServer->sin_port=htons(port);
|
||||
udp_struct->fd = udp_client_fd;
|
||||
//shutdown(udp_client_fd,SHUT_RD);
|
||||
|
||||
//csi_kernel_task_new((k_task_entry_t)udp_client_speed_send, "speed", udp_struct, 1, 0, NULL, 1024, &eloop_task_handle);
|
||||
eloop_add_fd( udp_client_fd, EVENT_WRITE, EVENT_F_ENABLED, (void*)udp_client_speed_send, (void*)udp_struct );
|
||||
eloop_add_fd( udp_client_fd, EVENT_READ, EVENT_F_ENABLED, (void*)udp_client_speed_recv, (void*)udp_struct );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************TCP*****************************************************/
|
||||
|
||||
void TcpTX_event(struct event *ei, void *d)
|
||||
{
|
||||
int fd = (int)d;
|
||||
int res;
|
||||
static uint8_t *send_buf = NULL;
|
||||
|
||||
|
||||
if(!send_buf)
|
||||
{
|
||||
send_buf = (uint8_t*)malloc(UDP_RCV_SIZE*10);
|
||||
|
||||
if(!send_buf)
|
||||
{
|
||||
printf("%s no enough space\n",__FUNCTION__);
|
||||
eloop_remove_event(ei);
|
||||
if(fd > 0)
|
||||
{
|
||||
closesocket(fd);
|
||||
}
|
||||
send_buf = NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
res = send(fd,send_buf,UDP_RCV_SIZE*10,0);
|
||||
|
||||
if(res < 0)
|
||||
{
|
||||
printf("%s res:%d\n",__FUNCTION__,res);
|
||||
eloop_remove_event(ei);
|
||||
if(fd > 0)
|
||||
{
|
||||
closesocket(fd);
|
||||
}
|
||||
if(send_buf)
|
||||
{
|
||||
free(send_buf);
|
||||
send_buf = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void TcpTX_event2(void *d)
|
||||
{
|
||||
int fd = (int)d;
|
||||
int res;
|
||||
uint8_t *send_buf = (uint8_t*)malloc(UDP_RCV_SIZE);
|
||||
|
||||
|
||||
if(!send_buf)
|
||||
{
|
||||
if(fd > 0)
|
||||
{
|
||||
closesocket(fd);
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
while(1)
|
||||
{
|
||||
res = send(fd,send_buf,UDP_RCV_SIZE,0);
|
||||
|
||||
if(res < 0)
|
||||
{
|
||||
|
||||
if(fd > 0)
|
||||
{
|
||||
closesocket(fd);
|
||||
}
|
||||
free(send_buf);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
printf("%s end\n",__FUNCTION__);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void tcp_server_accept(struct event_info *e, void *d)
|
||||
{
|
||||
struct sockaddr_in addr;
|
||||
socklen_t namelen = sizeof(addr);
|
||||
int server_fd = (int)d;
|
||||
int client_fd;
|
||||
printf("%s:%d\tserver_fd:%d\n",__FUNCTION__,__LINE__,server_fd);
|
||||
client_fd = accept(server_fd,(struct sockaddr *)&addr,&namelen);
|
||||
if(client_fd > 0)
|
||||
{
|
||||
//k_task_handle_t eloop_task_handle;
|
||||
//添加读事件
|
||||
//eloop_add_fd( client_fd , EVENT_WRITE, EVENT_F_ENABLED, (void*)TcpTX_event, (void*)client_fd);
|
||||
//csi_kernel_task_new((k_task_entry_t)TcpTX_event2, "tcpTX", (void*)client_fd, 10, 0, NULL, 2048, &eloop_task_handle);
|
||||
os_task_create("tcpTX", TcpTX_event2, (void*)client_fd, OS_TASK_PRIORITY_NORMAL, 0, NULL, 2048);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void speedTest_tcp_server(int port)
|
||||
{
|
||||
|
||||
int tcp_server_fd;
|
||||
//uint16_t port = 8060;
|
||||
|
||||
printf("%s port:%d\n",__FUNCTION__,port);
|
||||
|
||||
tcp_server_fd = creat_tcp_socket(port);
|
||||
printf("%s fd:%d\n",__FUNCTION__,tcp_server_fd);
|
||||
if(tcp_server_fd>=0)
|
||||
{
|
||||
listen(tcp_server_fd,3);
|
||||
eloop_add_fd( tcp_server_fd, EVENT_READ, EVENT_F_ENABLED, (void*)tcp_server_accept, (void*)tcp_server_fd );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void tcp_rx_read(struct event_info *e, void *d)
|
||||
{
|
||||
int t_socket = (int)d;
|
||||
int nRecev;
|
||||
nRecev = recv(t_socket,speedTest_buf,UDP_RCV_SIZE,0);
|
||||
if(nRecev <= 0)
|
||||
{
|
||||
closesocket(t_socket);
|
||||
eloop_remove_event(e);
|
||||
os_printf("%s exit\n",__FUNCTION__);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void tcp_rx_server_accept(struct event_info *e, void *d)
|
||||
{
|
||||
struct sockaddr_in addr;
|
||||
socklen_t namelen = sizeof(addr);
|
||||
int server_fd = (int)d;
|
||||
int client_fd;
|
||||
printf("%s:%d\tserver_fd:%d\n",__FUNCTION__,__LINE__,server_fd);
|
||||
client_fd = accept(server_fd,(struct sockaddr *)&addr,&namelen);
|
||||
if(client_fd > 0)
|
||||
{
|
||||
eloop_add_fd( client_fd, EVENT_READ, EVENT_F_ENABLED, (void*)tcp_rx_read, (void*)client_fd );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void speedTest_tcp_rx_server(int port)
|
||||
{
|
||||
|
||||
int tcp_server_fd;
|
||||
//uint16_t port = 8060;
|
||||
|
||||
printf("%s port:%d\n",__FUNCTION__,port);
|
||||
|
||||
tcp_server_fd = creat_tcp_socket(port);
|
||||
printf("%s fd:%d\n",__FUNCTION__,tcp_server_fd);
|
||||
if(tcp_server_fd>=0)
|
||||
{
|
||||
listen(tcp_server_fd,3);
|
||||
eloop_add_fd( tcp_server_fd, EVENT_READ, EVENT_F_ENABLED, (void*)tcp_rx_server_accept, (void*)tcp_server_fd );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//udp定时发送结构
|
||||
struct UdpToIp
|
||||
{
|
||||
struct sockaddr_in remote_addr;
|
||||
struct event *timer_e;
|
||||
struct event *udp_e;
|
||||
int timer;
|
||||
int fd;
|
||||
};
|
||||
/*********************************************************************************************
|
||||
定时用udp发送数据
|
||||
*********************************************************************************************/
|
||||
|
||||
|
||||
static void Udp_to_ip_send(struct event *ei, void *d)
|
||||
{
|
||||
struct UdpToIp *udp_struct = (struct UdpToIp *)d;
|
||||
int serverfd = udp_struct->fd;
|
||||
struct sockaddr *remote_addr = (struct sockaddr *)&udp_struct->remote_addr;
|
||||
int retval, size;
|
||||
retval = 16;
|
||||
static uint8_t *udp_data = NULL;
|
||||
if(!udp_data)
|
||||
{
|
||||
udp_data = (uint8_t*)malloc(UDP_RCV_SIZE );
|
||||
}
|
||||
size = sendto(serverfd,udp_data, UDP_RCV_SIZE, 0, remote_addr, sizeof(struct sockaddr));
|
||||
//printf("%s:%d\tsize:%d\tEINPROGRESS:%d\n",__FUNCTION__,__LINE__,size,EINPROGRESS);
|
||||
eloop_set_event_enabled(ei,EVENT_F_DISABLED);
|
||||
}
|
||||
static void Udp_to_ip_timer(void *ei, void *d)
|
||||
{
|
||||
struct UdpToIp *udp_struct = (struct UdpToIp *)d;
|
||||
eloop_set_event_enabled(udp_struct->udp_e,EVENT_F_ENABLED);
|
||||
}
|
||||
|
||||
|
||||
static void udp_tx_start_listen(struct event *ei, void *d)
|
||||
{
|
||||
struct UdpToIp *udp_struct = (struct UdpToIp *)d;
|
||||
int t_socket = (int)udp_struct->fd;
|
||||
int retval = sizeof(struct sockaddr_in);
|
||||
struct sockaddr_in remote_addr;
|
||||
struct sockaddr_in *recv_addr = &udp_struct->remote_addr;
|
||||
int nRecev;
|
||||
nRecev = recvfrom(t_socket, (char*)speedTest_buf, sizeof(speedTest_buf)-1, 0, (struct sockaddr*)&remote_addr, (socklen_t*)&retval);
|
||||
if(nRecev > 0)
|
||||
{
|
||||
speedTest_buf[nRecev] = 0;
|
||||
if(strcmp((const char*)speedTest_buf,"start") == 0 )
|
||||
{
|
||||
|
||||
eloop_set_event_enabled(udp_struct->timer_e,1);
|
||||
memcpy(recv_addr,&remote_addr,sizeof(remote_addr));
|
||||
}
|
||||
else if(strcmp((const char *)speedTest_buf,"stop") == 0 )
|
||||
{
|
||||
eloop_set_event_enabled(udp_struct->timer_e,0);
|
||||
eloop_set_event_enabled(udp_struct->udp_e,0);
|
||||
os_printf("%s pause udp_tx\n",__FUNCTION__);
|
||||
}
|
||||
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
//定时向udp发送数据
|
||||
void Udp_to_ip(char *ip,int port,int timer)
|
||||
{
|
||||
int t_socket;
|
||||
t_socket = creat_udp_socket(30303);
|
||||
struct UdpToIp *udp_struct = (struct UdpToIp*)malloc(sizeof(struct UdpToIp));
|
||||
struct sockaddr_in *addrServer = &udp_struct->remote_addr;
|
||||
memset(addrServer,0,sizeof(struct sockaddr_in));;
|
||||
addrServer->sin_family=AF_INET;
|
||||
addrServer->sin_addr.s_addr=inet_addr(ip);
|
||||
addrServer->sin_port=htons(port);
|
||||
udp_struct->timer = timer;
|
||||
udp_struct->fd = t_socket;
|
||||
|
||||
|
||||
//添加事件,但是不启动,然后接收一个udp包数据后才开始发送
|
||||
udp_struct->udp_e = eloop_add_fd( t_socket, EVENT_WRITE, EVENT_F_NOACTION, (void*)Udp_to_ip_send, (void*)udp_struct );
|
||||
udp_struct->timer_e = eloop_add_timer(timer,EVENT_F_NOACTION,Udp_to_ip_timer,(void*)udp_struct);
|
||||
eloop_add_fd( t_socket, EVENT_READ, EVENT_F_ENABLED, (void*)udp_tx_start_listen, (void*)udp_struct );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static uint32_t speed_count = 0;
|
||||
|
||||
static void udp_rx(struct event *ei, void *d)
|
||||
{
|
||||
int t_socket = (int)d;
|
||||
unsigned int retval = sizeof(struct sockaddr_in);
|
||||
struct sockaddr_in remote_addr;
|
||||
int nRecev;
|
||||
nRecev = recvfrom(t_socket, (char*)speedTest_buf, sizeof(speedTest_buf), 0, (struct sockaddr*)&remote_addr, (socklen_t*)&retval);
|
||||
if(nRecev > 0)
|
||||
{
|
||||
speed_count += nRecev;
|
||||
}
|
||||
return;
|
||||
}
|
||||
static void udp_rx_msg_timer(void *ei, void *d)
|
||||
{
|
||||
static uint32_t start_time = 0;
|
||||
if(start_time == 0)
|
||||
{
|
||||
start_time = os_jiffies();
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t speed = 0;
|
||||
uint32 time = (os_jiffies()-start_time);
|
||||
if(time){
|
||||
speed = speed_count/time;
|
||||
os_printf("speed:%d KB/s\n",speed);
|
||||
}else{
|
||||
os_printf("!!!!!!!!!!!!!!!!!!!!!time err %d\n",time);
|
||||
}
|
||||
|
||||
|
||||
//os_printf("count:%d\ttime:%d\t%d\tspeed:%d KB/s\n",speed_count,(os_jiffies()-start_time),speed,speed_count/(os_jiffies()-start_time));
|
||||
start_time = os_jiffies();
|
||||
speed_count = 0;
|
||||
}
|
||||
|
||||
//统计接收udp的数据,timer定时打印
|
||||
void Udp_rx_server(int port,int timer)
|
||||
{
|
||||
int t_socket;
|
||||
t_socket = creat_udp_socket(port);
|
||||
|
||||
|
||||
|
||||
//添加事件
|
||||
eloop_add_fd( t_socket, EVENT_READ, EVENT_F_ENABLED, (void*)udp_rx, (void*)t_socket );
|
||||
eloop_add_timer(timer,EVENT_F_ENABLED,udp_rx_msg_timer,(void*)NULL);
|
||||
|
||||
}
|
||||
|
||||
|
||||
int get_tcp_connect(char *ip,int port)
|
||||
{
|
||||
int t_socket = socket(AF_INET, SOCK_STREAM, 0);
|
||||
|
||||
struct sockaddr_in server;
|
||||
server.sin_family = AF_INET;
|
||||
server.sin_port = htons(port);
|
||||
server.sin_addr.s_addr = inet_addr(ip);
|
||||
|
||||
|
||||
struct timeval timeout;
|
||||
timeout.tv_sec = 1;
|
||||
timeout.tv_usec = 0;
|
||||
fcntl(t_socket, F_SETFL, O_NONBLOCK);
|
||||
if (setsockopt(t_socket, SOL_SOCKET, LWIP_SO_RCVTIMEO, &timeout, sizeof(timeout)) < 0) {
|
||||
// 错误处理
|
||||
}
|
||||
//连接服务器
|
||||
os_printf("ip:%s\tport:%d timeout\n",ip,port);
|
||||
int res = connect_tmo(t_socket, (struct sockaddr*)&server, sizeof(server),1000);
|
||||
os_printf("%s res:%d\n",__FUNCTION__,res);
|
||||
if(res < 0)
|
||||
{
|
||||
closesocket(t_socket);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int flag = 1; // 1 表示禁用 Nagle 算法,0 表示启用
|
||||
setsockopt(t_socket, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag));
|
||||
return t_socket;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
#ifndef __SPEEDTEST_H
|
||||
#define __SPEEDTEST_H
|
||||
void speedTest_udp_server(int port);
|
||||
void speedTest_udp_client(const char *ip,int port);
|
||||
void speedTest_tcp_server(int port);
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user