我们之前写过多线程,多进程,select机制的TCP服务器,作为IO复用的另一种机制poll,我们也有必要去学习一下,下面就是基于poll机制的服务器。
makefile
.PHONY:all
all:client server
client:client.c
gcc -o $@ $^
server:server.c
gcc -o $@ $^
server
/*************************************************************************
> File Name: server.c
> Author: xuyang
> Mail: [email protected]
> Created Time: 2017-06-30 14:40:27
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<sys/wait.h>
#include<assert.h>
#include <poll.h>
#define SIZE 1024
void usage(const char* arg)
{
printf("correct usage : %s [ip] [port]\n", arg);
}
int start_up(const char* ip, int port)
{
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1)
{
fprintf(stderr, "socket failure\n");
exit(-1);
}
struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(port);
inet_aton(ip, &local.sin_addr);
int opt = 1;
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0)
{
fprintf(stderr,