What are best practices for working with pipes and sockets?

Best practices for working with pipes and sockets in Perl include proper error handling, resource management, and ensuring data integrity. Utilizing non-blocking I/O can improve performance and responsiveness. It's also vital to close file descriptors correctly and use higher-level abstractions when available.
pipes, sockets, Perl, error handling, resource management, non-blocking I/O, data integrity, file descriptors

#!/usr/bin/perl
use strict;
use warnings;

# Example of creating a simple socket connection

use IO::Socket;

# Create a listening socket
my $socket = IO::Socket::INET->new(
    LocalAddr => '127.0.0.1',
    LocalPort => 5000,
    Proto     => 'tcp',
    Listen    => 5,
    Reuse     => 1
) or die "Could not create socket: $!\n";

print "Server listening on port 5000\n";

while (my $client_socket = $socket->accept()) {
    my $client_address = $client_socket->peerhost();
    print "Connection from $client_address\n";
    
    # Handle client data
    while (my $data = <$client_socket>) {
        print "Received: $data";
        print $client_socket "You said: $data";  # Echo back
    }

    close($client_socket) or warn "Could not close socket: $!\n";
}

close($socket) or warn "Could not close socket: $!\n";
    

pipes sockets Perl error handling resource management non-blocking I/O data integrity file descriptors