#include <netinet/in.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <assert.h>
static int create_local_sock(void)
{
struct sockaddr_in un;
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&un, 0, sizeof(un));
un.sin_family = AF_INET;
un.sin_port = htons(8888);
un.sin_addr.s_addr = 0;
if(bind(sockfd, (struct sockaddr *)&un, sizeof(un))<0){
assert(0);
}
listen(sockfd, 10);
return sockfd;
}
ssize_t prev_recv, curr_recv;
void *print_fun(void *arg)
{
while(1){
sleep(1);
ssize_t curr_recv1 = curr_recv;
printf("Recv %d MB/s\n", (curr_recv1 - prev_recv)/1024/1024);
prev_recv = curr_recv1;
}
}
int s_main(int argc, char **argv)
{
char buf[2048];
int fd = create_local_sock();
pthread_t thr;
pthread_create(&thr, NULL, print_fun, NULL);
while(1){
int client = accept(fd, NULL, NULL);
while(1){
ssize_t len = recv(client, buf, sizeof(buf), 0);
if(len > 0){
curr_recv += len;
}else{
break;
}
}
}
}
ssize_t prev_send, curr_send;
void *print_fun_c(void *arg)
{
while(1){
sleep(1);
ssize_t curr_send1 = curr_send;
printf("Send %d MB/s\n", (curr_send1 - prev_send)/1024/1024);
prev_send = curr_send1;
}
}
int c_main(int argc, char **argv)
{
char buf[2048];
struct sockaddr_in un;
int fd = socket(AF_INET, SOCK_STREAM, 0);
memset(&un, 0, sizeof(un));
un.sin_family = AF_INET;
un.sin_port = htons(8888);
un.sin_addr.s_addr = inet_addr(argv[1]);
connect(fd, (struct sockaddr*)&un, sizeof(un));
pthread_t thr;
pthread_create(&thr, NULL, print_fun_c, NULL);
while(1){
ssize_t len = send(fd, buf, 1400, 0);
if(len > 0){
curr_send += len;
}else{
break;
}
}
}
int main(int argc, char **argv){
if(strcmp(argv[1], "s")==0) return s_main(argc,argv);
return c_main(argc,argv);
}
У меня есть простой принимающий tcp-сервер и клиент, они оба принимают / отправляют пакеты в цикле как можно быстрее.Я использую полезную нагрузку 1400, кажется, MTU 1500. В реальном тестировании пропускная способность составляет только 1/3 по сравнению с iperf3.Я не могу понять, почему в нем так много различий.Я проверил использование процессора.Очень похожий.Что вредит моей работе?