linux bổn địa sáo tiếp tự hiệu suất, cầu trợ: Linux bổn địa vực sáo tiếp tự hòa epoll đích vấn đề

Cai lâu tằng nghi tự vi quy dĩ bị hệ thống chiết điệp ẩn tàng thử lâu tra khán thử lâu

Tối cận tại học linux biên trình. Tưởng dụng sáo tiếp tự tại tiến trình gian truyện tín tức, biên dịch thành công liễu đãn trắc thí đoan trảo bất đáo serc.

Đại mã như hạ, tá giám biệt nhân đích cải đích, kiểm trắc bất đáo sự kiện:

//serc.c

#include

#include

#include

#include

#include

#include

#include

#include

#define SERVER_NAME "@Banana"

void addfd(int epollfd,int fd)

{

struct epoll_event event;

event.data.fd=fd;

event.events=EPOLLIN|EPOLLET;

epoll_ctl(epollfd,EPOLL_CTL_ADD,fd,&event);

fcntl(fd,F_SETFL,fcntl(fd,F_GETFL)|O_NONBLOCK);

}

int main()

{

int listen_fd,com_fd,ret,i,selectfd,serverlen;

static char recv_buf[1024];

int epollfd=epoll_create(5);

struct sockaddr_un srv_addr;

do

{

listen_fd=socket(AF_UNIX,SOCK_STREAM,0);

if(listen_fd<0){perror( "create socket failure" );break;}

srv_addr.sun_family=AF_UNIX;

strncpy(srv_addr.sun_path,SERVER_NAME,sizeof(srv_addr.sun_path)-1);

printf( "%s\n",srv_addr.sun_path);

srv_addr.sun_path[0]=0;

serverlen = strlen(SERVER_NAME)+offsetof(struct sockaddr_un, sun_path);

unlink(SERVER_NAME);

ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));

if(ret==-1){perror( "Bind failure" );break;}

ret=listen(listen_fd,1);

if(ret==-1){perror( "Listen failure" );break;}

struct epoll_event events[1024];

if(epollfd==-1){perror( "create epoll failure" );break;}

addfd(epollfd,listen_fd);

while(1)

{

int number=epoll_wait(epollfd,events,1024,-1);

if(number<0){perror( "epoll failure" );break;}

printf( "epoll read\n" );

for(i=0;i

{

selectfd=events[i].data.fd;

if(selectfd==listen_fd)

{

struct sockaddr_un clt_addr;

int len=serverlen;

int connfd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len);

addfd(epollfd,connfd);

}

else if(events[i].events&EPOLLIN)

{

while(1)

{

memset(recv_buf,0,1024);

ret=read(com_fd,recv_buf,sizeof(recv_buf));

if(ret<0)

{

if((errno==EAGAIN)||(errno==EWOULDBLOCK))

break;

close(selectfd);

break;

}

else if(ret==0)

close(selectfd);

else

printf( "Message:%s\n",recv_buf);

}

}

else

printf( "Something Happened" );

}

}

}while(0);

close(com_fd);

close(listen_fd);

unlink(SERVER_NAME);

return 0;

}

//clic.c:

#include

#include

#include

#include

#include

#define UNIX_DOMAIN "@Banana"

int main(void)

{

int connect_fd;

int ret;

char snd_buf[1024];

int i,srvaddr;

static struct sockaddr_un srv_addr;

connect_fd=socket(AF_UNIX,SOCK_STREAM,0);

if(connect_fd<0)

{

perror( "cannot create communication socket" );

return 1;

}

srv_addr.sun_family=AF_UNIX;

strcpy(srv_addr.sun_path,UNIX_DOMAIN);

strncpy(srv_addr.sun_path,UNIX_DOMAIN,sizeof(srv_addr.sun_path)-1);

srv_addr.sun_path[0]=0;

srvaddr=strlen(SERVER_NAME)+offsetof(struct sockaddr_un, sun_path);

unlink(UNIX_DOMAIN);

ret=connect(connect_fd,(struct sockaddr*)&srv_addr,srvaddr);

if(ret==-1)

{

perror( "cannot connect to the server" );

close(connect_fd);

return 1;

}

memset(snd_buf,0,1024);

strcpy(snd_buf, "message from client" );

//send info server

for(i=0;i<4;i++)

write(connect_fd,snd_buf,sizeof(snd_buf));

close(connect_fd);

return 0;

}

Đãn thị đối vu như hạ đích trình tự, trắc thí liên tiếp thành công liễu, nhi thả khả dĩ hòa thượng diện đích serc tịnh tồn:

//ser.c

#include

#include

#include

#include

#define SERVER_NAME "@Banana

int main(void)

{

// socklen_t clt_addr_len;

int listen_fd,com_fd,ret,i,len;

static char recv_buf[1024];

struct sockaddr_un clt_addr;

len=sizeof(clt_addr);

struct sockaddr_un srv_addr;

listen_fd=socket(AF_UNIX,SOCK_STREAM,0);

if(listen_fd<0)

{

perror( "cannot create communication socket" );

return 1;

}

srv_addr.sun_family=AF_UNIX;

strncpy(srv_addr.sun_path,SERVER_NAME,sizeof(srv_addr.sun_path)-1);

printf( "%s\n",srv_addr.sun_path);

srv_addr.sun_path[0]=0;

unlink(SERVER_NAME);

ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));

if(ret==-1)

{

perror( "cannot bind server socket" );

close(listen_fd);

unlink(SERVER_NAME);

return 1;

}

//listen sockfd

ret=listen(listen_fd,1);

if(ret==-1)

{

perror( "cannot listen the client connect request" );

close(listen_fd);

unlink(SERVER_NAME);

return 1;

}

//have connect request use accept

com_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len);

if(com_fd<0)

{

perror( "cannot accept client connect request" );

close(listen_fd);

unlink(SERVER_NAME);

return 1;

}

//read and printf sent client info

printf( "/n=====info=====/n" );

for(i=0;i<4;i++)

{

memset(recv_buf,0,1024);

int num=read(com_fd,recv_buf,sizeof(recv_buf));

printf( "Message from client (%d)):%s/n",num,recv_buf);

}

close(com_fd);

close(listen_fd);

unlink(SERVER_NAME);

return 0;

}

Cầu đại thần đái đái ngã............

Bình luận
Thiêm gia hồng bao

Thỉnh điền tả hồng bao chúc phúc ngữ hoặc tiêu đề

Hồng bao cá sổ tối tiểu vi 10 cá

Nguyên

Hồng bao kim ngạch tối đê 5 nguyên

Đương tiền dư ngạch3.43Nguyên Tiền vãng sung trị >
Nhu chi phó:10.00Nguyên
Thành tựu nhất ức kỹ thuật nhân!
Lĩnh thủ hậu nhĩ hội tự động thành vi bác chủ hòa hồng bao chủ đích phấn ti Quy tắc
hope_wisdom
Phát xuất đích hồng bao
Thật phóNguyên
Sử dụng dư ngạch chi phó
Điểm kích trọng tân hoạch thủ
Tảo mã chi phó
Tiền bao dư ngạch 0

Để khấu thuyết minh:

1. Dư ngạch thị tiền bao sung trị đích hư nghĩ hóa tệ, án chiếu 1:1 đích bỉ lệ tiến hành chi phó kim ngạch đích để khấu.
2. Dư ngạch vô pháp trực tiếp cấu mãi hạ tái, khả dĩ cấu mãi VIP, phó phí chuyên lan cập khóa trình.

Dư ngạch sung trị