mtcp-stack / mtcp

mTCP: A Highly Scalable User-level TCP Stack for Multicore Systems
Other
1.96k stars 432 forks source link

mtcp_api sample test app, mtcp_connect fail #298

Closed whswhs1128 closed 4 years ago

whswhs1128 commented 4 years ago

hi everyone,

I'm porting a test code from socket to mtcp_socket. client side build sockets and send chars to server side. here's my codes.

server: `#include <sys/socket.h>

include <netinet/in.h>

include <arpa/inet.h>

//#include

include

include

include "mtcp_api.h"

include "mtcp_epoll.h"

struct thread_context { int core; mctx_t mctx; }; /struct sockaddr_in{ sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; }; struct in_adrr{ uint32_t s_addr; };/ int main(int argc, char const argv[]) { // mtcp_core_affinitize(1); mctx_t mctx; struct mtcp_conf mcfg; struct thread_context ctx; int core = 0;

// This must be done before mtcp_init
mtcp_getconf(&mcfg);
mcfg.num_cores = 1;
mtcp_setconf(&mcfg);
// Seed RNG
srand(time(NULL));

// Init mtcp
printf("Initializing mtcp...\n");
if (mtcp_init("server.conf")) {
    printf("Failed to initialize mtcp.\n");
    return -1;
}

mtcp_core_affinitize(core);
ctx = (struct thread_context *) calloc(1, sizeof(struct thread_context));
if (!ctx) {
    printf("Failed to create context.");
    perror("calloc");
    return -1;
}
ctx->core = core;
ctx->mctx = mtcp_create_context(core);
if (!ctx->mctx) {
    printf("Failed to create mtcp context.");
    return -1;
}
mctx = ctx->mctx;
/* code */

int serv_sock = mtcp_socket(mctx,AF_INET,SOCK_STREAM,0);
    if (serv_sock < 0) {
            printf("Failed to create socket!\n");
    }

struct sockaddr_in serv_addr;

serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(1234);

serv_addr.sin_addr.s_addr = inet_addr("192.168.2.213");
int ret=mtcp_bind(mctx,serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr));
if (ret < 0)
    printf("bind fail.\n");

int reti = mtcp_listen(mctx,serv_sock,4096);
if (reti < 0) {
    printf("Failed to listen:\n");
}

struct sockaddr_in clnt_addr;
socklen_t clnt_addr_size = sizeof(clnt_addr);
int clnt_sock = mtcp_accept(mctx,serv_sock,(struct sockaddr*)&clnt_addr,&clnt_addr_size);

char buf[1024];
mtcp_read(mctx,clnt_sock,&buf,sizeof(buf));
printf("whs:%s\n",buf);

mtcp_close(mctx,clnt_sock);
mtcp_close(mctx,serv_sock);

return 0;

}`

client: `#include <sys/socket.h>

include <netinet/in.h>

include <arpa/inet.h>

include

include //memset的头文件

//#include

include

include "mtcp_api.h"

include "mtcp_epoll.h"

struct thread_context { int core; mctx_t mctx; };

int main(int argc, char const *argv[]) {

struct mtcp_conf mcfg;
mctx_t mctx;
struct thread_context *ctx;
int core = 0;

// This must be done before mtcp_init
mtcp_getconf(&mcfg);
mcfg.num_cores = 1;
mtcp_setconf(&mcfg);
// Seed RNG
srand(time(NULL));

// Init mtcp
printf("Initializing mtcp...\n");
if (mtcp_init("client.conf")) {
    printf("Failed to initialize mtcp.\n");
    return -1;
}

    mtcp_core_affinitize(core);
ctx = (struct thread_context *) calloc(1, sizeof(struct thread_context));
if (!ctx) {
    printf("Failed to create context.");
    perror("calloc");
    return -1;
}
ctx->core = core;
ctx->mctx = mtcp_create_context(core);
if (!ctx->mctx) {
    printf("Failed to create mtcp context.");
    return -1;
}
mctx = ctx->mctx;

/* code */

//int clnt_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
int clnt_sock = mtcp_socket(mctx,AF_INET,SOCK_STREAM,0);
    if (clnt_sock < 0) {
            printf("Failed to create socket!\n");
    }

struct sockaddr_in serv_addr;
//memset(&serv_addr,0,sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(1234);
//serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_addr.s_addr = inet_addr("192.168.2.213");
int serv_sock = mtcp_connect(mctx,clnt_sock,(struct sockaddr*) &serv_addr,sizeof(serv_addr));
   if(serv_sock < 0)
    printf("mtcp_connect fail.\n");

char* str = "this message form client";
mtcp_write(mctx,clnt_sock,str,strlen(str));

mtcp_close(mctx,clnt_sock);
mtcp_close(mctx,serv_sock);

return 0;

} and fail with: [mtcp_create_context:1359] CPU 0 is now the master thread. [GetOutputInterface: 33] [WARNING] No route to 192.168.2.213 [GetOutputInterface: 33] [WARNING] No route to 192.168.2.213 mtcp_connect fail.`

anyone can help me?