epoll+socket実現socket同時linuxサーバ(c)
2951 ワード
今回のソースコードはネット上で転載したもので、権利侵害があれば、本人に連絡してください.QQ:1031893464、直ちに削除します.
今回は勉強のため、他の人のコードを参考にして、次回は自分が書いたepoll同時サーバーを発表します.
今回は勉強のため、他の人のコードを参考にして、次回は自分が書いたepoll同時サーバーを発表します.
/* : epoll, socket
* , , epoll_event
* xs
*/
#include
#include
#include
#include
#include
#include
#include
#include
#define MYPORT 12345
// connect
#define MAX_EVENTS 500
//
int currentClient = 0;
// buf
#define REVLEN 10
char recvBuf[REVLEN];
//epoll
int epollfd;
//
struct epoll_event eventList[MAX_EVENTS];
void AcceptConn(int srvfd);
void RecvData(int fd);
int main()
{
int i, ret, sinSize;
int recvLen = 0;
fd_set readfds, writefds;
int sockListen, sockSvr, sockMax;
int timeout;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
//socket
if((sockListen=socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("socket error
");
return -1;
}
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(MYPORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
//bind
if(bind(sockListen, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0)
{
printf("bind error
");
return -1;
}
//listen
if(listen(sockListen, 5) < 0)
{
printf("listen error
");
return -1;
}
// epoll
epollfd = epoll_create(MAX_EVENTS);
struct epoll_event event;
event.events = EPOLLIN|EPOLLET;
event.data.fd = sockListen;
//add Event
if(epoll_ctl(epollfd, EPOLL_CTL_ADD, sockListen, &event) < 0)
{
printf("epoll add fail : fd = %d
", sockListen);
return -1;
}
//epoll
while(1)
{
timeout=3000;
//epoll_wait
int ret = epoll_wait(epollfd, eventList, MAX_EVENTS, timeout);
if(ret < 0)
{
printf("epoll error
");
break;
}
else if(ret == 0)
{
printf("timeout ...
");
continue;
}
// , , poll
int i = 0;
for(i=0; i