mtcp-stack/mtcp

mtcp_api sample test app, mtcp_connect fail

whswhs1128 opened this issue · 0 comments

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 <string.h>
#include <stdio.h>
#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 <unistd.h>
#include <string.h> //memset的头文件
//#include
#include <stdio.h>
#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?