c_cpp server.c
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp server.c相关的知识,希望对你有一定的参考价值。
#include <sys/types.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <signal.h>
#include <errno.h>
#define MY_SOCK_PATH "/tmp/echo.sock"
volatile sig_atomic_t eflag = 0;
void sig_handle(int signum) {
eflag = 1;
}
int main(int argc, char const* argv[])
{
if (signal(SIGINT, sig_handle) == SIG_ERR) {
exit(2);
}
struct sockaddr_un addr, peer_addr;
int sock = socket(AF_LOCAL, SOCK_STREAM, 0);
if (sock == -1) {
perror("failed to create socket");
exit(1);
}
if (fcntl(sock, F_SETFL, O_NONBLOCK) == -1) {
perror("failed to fcntl");
exit(1);
}
socklen_t peer_addr_size;
memset(&addr, 0, sizeof(struct sockaddr_un));
addr.sun_family = AF_LOCAL;
// strcpy(addr.sun_path, MY_SOCK_PATH);
strcpy(addr.sun_path, MY_SOCK_PATH);
if ((bind(sock, (struct sockaddr *) &addr, sizeof(struct sockaddr_un))) == -1) {
perror("failed to bind socket");
exit(1);
}
if ((listen(sock, 4)) == -1) {
perror("failed to listen socket");
exit(1);
}
memset(&peer_addr, 0, sizeof(struct sockaddr_un));
socklen_t len = sizeof(struct sockaddr_un);
fd_set rfds;
int retval;
while (!eflag) {
struct timeval tv;
tv.tv_sec = 5;
tv.tv_usec = 0;
FD_ZERO(&rfds);
FD_SET(sock, &rfds);
retval = select(sock+1, &rfds, NULL, NULL, &tv);
if (retval == -1) {
perror("failed to select:");
if (errno == EINTR) {
break;
} else {
exit(1);
}
} else if (retval) {
int fd = accept(sock, (struct sockaddr *)&peer_addr, &len);
if (fd < 0) {
perror("failed to accept");
exit(1);
}
printf("[33m[server][39m accept\n");
char buf[64];
read(fd, buf, 64);
size_t s = sizeof(buf);
printf("[33m[server][39m read\n");
sleep(1);
write(fd, buf, s);
} else {
printf("timeout\n");
}
}
close(sock);
remove(MY_SOCK_PATH);
return 0;
}
以上是关于c_cpp server.c的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp select_server.c
c_cpp server_tcp_epoll.c
c udp server client demo --待调试
Openssl Server C Demo
Openssl Server C Demo
Openssl Server C Demo