#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/time.h>
#define PORT 9090
#define BUFFER_SIZE 1024
int server_fd, client_socket;
struct sockaddr_in address;
socklen_t addr_len = sizeof(address);
void timer_handler(int sig) {
printf("Timer triggered!\n");
}
void* listen_thread(void* arg) {
server_fd = socket(AF_INET, SOCK_STREAM, 0);
int opt = 1;
setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt));
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
bind(server_fd, (struct sockaddr*)&address, sizeof(address));
listen(server_fd, 3);
printf("Listening on port %d...\n", PORT);
client_socket = accept(server_fd, (struct sockaddr*)&address, &addr_len);
printf("Client connected!\n");
return NULL;
}
void* recv_thread(void* arg) {
char buffer[BUFFER_SIZE];
while (1) {
memset(buffer, 0, BUFFER_SIZE);
int valread = recv(client_socket, buffer, BUFFER_SIZE, 0);
if (valread > 0) {
printf("Received: %s\n", buffer);
}
}
return NULL;
}
void* send_thread(void* arg) {
char msg[BUFFER_SIZE];
while (1) {
printf("Enter message: ");
fgets(msg, BUFFER_SIZE, stdin);
send(client_socket, msg, strlen(msg), 0);
}
return NULL;
}
void start_timer() {
struct itimerval timer;
signal(SIGALRM, timer_handler);
timer.it_value.tv_sec = 5; // First trigger in 5 seconds
timer.it_value.tv_usec = 0;
timer.it_interval.tv_sec = 5; // Then every 5 seconds
timer.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &timer, NULL);
}
int main() {
pthread_t listen_tid, send_tid, recv_tid;
// Start listener
pthread_create(&listen_tid, NULL, listen_thread, NULL);
pthread_join(listen_tid, NULL); // Wait until a client connects
// Start other threads
pthread_create(&recv_tid, NULL, recv_thread, NULL);
pthread_create(&send_tid, NULL, send_thread, NULL);
// Start timer
start_timer();
pthread_join(recv_tid, NULL);
pthread_join(send_tid, NULL);
close(server_fd);
return 0;
}
'2025/08/23'에 해당되는 글 4건
-
02:17:15
socket pthread