1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| ##include <stdio.h> ##include <errno.h> ##include <unistd.h> ##include <string.h> ##include <sys/socket.h> ##include <netinet/in.h>
##include <fcntl.h> ##include <pthread.h>
##define BUFFER_LENGTH 1024
void *client_thread(void *arg) { int clientfd = *(int*)arg; while(1){ char buffer[BUFFER_LENGTH] = {0}; int ret = recv(clientfd, buffer, BUFFER_LENGTH, 0); if(ret == 0) { close(clientfd); break; } printf("ret : %d, Buffer : %s\n",ret, buffer); send(clientfd, buffer, ret, 0);
} }
int main() { int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in servaddr; memset(&servaddr, 0, sizeof(struct sockaddr_in));
servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(9999);
if(-1 == bind(sockfd, (struct sockaddr*)&servaddr, sizeof(struct sockaddr))) { printf("bind failed: %s", strerror(errno)); return -1; } listen(sockfd, -1);
##if 0 int flags = fcntl(sockfd, F_GETFL, 0); flags |= O_NONBLOCK; fcntl(sockfd, F_SETFL, flags); ##endif
struct sockaddr_in clientaddr; socklen_t len = sizeof(clientaddr); while(1) { int clientfd = accept(sockfd, (struct sockaddr*)&clientaddr, &len);
#if 0 char buffer[BUFFER_LENGTH] = {0}; int ret = recv(clientfd, buffer, BUFFER_LENGTH, 0);
printf("ret : %d, Buffer : %s\n",ret, buffer); send(clientfd, buffer, ret, 0); #else pthread_t threadid; pthread_create(&threadid, NULL, client_thread, &clientfd); #endif } }
|