#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
int main() {
// Step 1: Declare a sockaddr_in structure to store socket information
struct sockaddr_in server_address;
// Step 2: Initialize the sockaddr_in structure
server_address.sin_family = AF_INET; // Address family (IPv4)
server_address.sin_port = htons(8080); // Port number (convert to network byte order)
server_address.sin_addr.s_addr = INADDR_ANY; // IP address (accept connections from any IP)
// Step 3: Create a socket using the socket() system call
int server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket == -1) {
perror("Error creating socket");
exit(EXIT_FAILURE);
}
// Step 4: Bind the socket to a specific IP address and port using bind() system call
if (bind(server_socket, (struct sockaddr*)&server_address, sizeof(server_address)) == -1) {
perror("Error binding socket");
exit(EXIT_FAILURE);
}
// Step 5: Listen for incoming connections using listen() system call
if (listen(server_socket, 10) == -1) {
perror("Error listening for connections");
exit(EXIT_FAILURE);
}
// Step 6: Accept a connection using accept() system call
struct sockaddr_in client_address;
int client_socket, client_address_length = sizeof(client_address);
client_socket = accept(server_socket, (struct sockaddr)&client_address, (socklen_t)&client_address_length);
if (client_socket == -1) {
perror("Error accepting connection");
exit(EXIT_FAILURE);
}
// Step 7: Perform operations on the accepted connection (send/receive data, etc.)
// Step 8: Close the sockets
close(client_socket);
close(server_socket);
return 0;
}