udp +epoll+多线程服务器 udp_epoll_server.c:
/*
gcc -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I${ORACLE_HOME}/rdbms/public
-I${ORACLE_HOME}/rdbms/demo -L${ORACLE_HOME}/lib -lclntsh -pthread -o
udp_epoll_server udp_epoll_server.c -lpthread
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/epoll.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <pthread.h>
#include <assert.h>
#define MAXBUF 1024
#define MAXEPOLLSIZE 100
/*
setnonblocking – 设置句柄为非阻塞方式
*/
int setnonblocking(int sockfd)
{
if (fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFD, 0)|O_NONBLOCK) == -1)
{
return -1;
}
return 0;
}
/*
pthread_handle_message – 线程处理 socket 上的消息收发
*/
void* pthread_handle_message(int* sock_fd)
{
char recvbuf[MAXBUF + 1];
char sendbuf[MAXBUF+1];
int ret;
int new_fd;
struct sockaddr_in client_addr;
Epoll 的udp通信代码(服务器+客户端)
最新推荐文章于 2023-06-08 20:29:44 发布