Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <netinet/in.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <errno.h>
- #include <string.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #define SRV_PORT 9527
- #define LISTEN_LEN 5
- #define MAX_BUF_LEN 1024
- void do_job(int);
- int main(int argc, char **argv)
- {
- int listenfd, connfd;
- pid_t child_pid;
- struct sockaddr_in srv_addr, cli_addr;
- int cli_len = sizeof(cli_addr);
- printf("Hello, I'm server!\r\n");
- listenfd = socket(AF_INET, SOCK_STREAM, 0);
- if (listenfd == 0)
- {
- printf("socket fail, err(%s)\n", strerror(errno));
- return -1;
- }
- bzero(&srv_addr, sizeof(struct sockaddr_in));
- srv_addr.sin_family = AF_INET;
- srv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
- srv_addr.sin_port = htons(SRV_PORT);
- if (0 != bind(listenfd, (struct sockaddr*)&srv_addr, sizeof(srv_addr)))
- {
- printf("bind fail, err(%s)\n", strerror(errno));
- close(listenfd);
- return -1;
- }
- if (0 != listen(listenfd, LISTEN_LEN))
- {
- printf("listen fail, err(%s)\n", strerror(errno));
- close(listenfd);
- return -1;
- }
- while (1)
- {
- connfd = accept(listenfd, (struct sockaddr*)&cli_addr, (socklen_t *)&cli_len);
- if (-1 == connfd)
- {
- printf("accept fail, err(%s)\n", strerror(errno));
- close(listenfd);
- return -1;
- }
- if ((child_pid = fork()) == 0)
- {
- close(listenfd);
- do_job(connfd);
- //close(connfd);
- exit(0);
- }
- close(connfd);
- }
- return 0;
- }
- void do_job(int fd)
- {
- char buf[MAX_BUF_LEN];
- ssize_t len;
- bzero(buf, MAX_BUF_LEN);
- len = read(fd, buf, MAX_BUF_LEN);
- if (len < 0)
- {
- printf("read failed\n");
- return;
- }
- printf("recv from client:%s\n", buf);
- if (-1 == write(fd, "hello, welcome to my server \r\n", 32))
- {
- printf("write failed]\n");
- return;
- }
- }
Add Comment
Please, Sign In to add comment