CPlay/sock.c
2025-05-12 12:09:54 +02:00

71 lines
1.8 KiB
C

#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
int main(void) {
// Get TCP protocol entry
struct protoent *pent = getprotobyname("tcp");
if (!pent) {
perror("getprotobyname failed");
return EXIT_FAILURE;
}
// Create socket
int server_fd = socket(AF_INET, SOCK_STREAM, pent->p_proto);
if (server_fd < 0) {
perror("socket failed");
return EXIT_FAILURE;
}
// Set up server address structure
struct sockaddr_in server_addr = {
.sin_family = AF_INET,
.sin_addr.s_addr = htonl(INADDR_ANY), // Bind to any available address
.sin_port = htons(8080) // Port 8080
};
// Bind socket
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) <
0) {
perror("bind failed");
close(server_fd);
return EXIT_FAILURE;
}
// Listen for incoming connections
if (listen(server_fd, 5) < 0) {
perror("listen failed");
close(server_fd);
return EXIT_FAILURE;
}
printf("Server listening on port 8080...\n");
// Accept one client connection
struct sockaddr_in client_addr;
socklen_t client_len = sizeof(client_addr);
int client_fd =
accept(server_fd, (struct sockaddr *)&client_addr, &client_len);
if (client_fd < 0) {
perror("accept failed");
close(server_fd);
return EXIT_FAILURE;
}
printf("Client connected!\n");
// Send a message to the client
const char *message = "Hello from server!\n";
send(client_fd, message, strlen(message), 0);
// Cleanup
close(client_fd);
close(server_fd);
printf("Exit\n");
return EXIT_SUCCESS;
}