ZetCode

PHP getprotobyname Function

last modified April 4, 2025

The PHP getprotobyname function converts protocol names to their corresponding protocol numbers. It's useful in network programming.

Basic Definition

getprotobyname looks up protocol names in the system's protocol database. It returns the protocol number associated with the given name.

Syntax: getprotobyname(string $name): int|false. Returns the protocol number or false if not found. Requires proper system configuration.

Basic Protocol Lookup

This example demonstrates converting common protocol names to their numbers.

basic_lookup.php
<?php

declare(strict_types=1);

$protocol = "tcp";
$number = getprotobyname($protocol);

if ($number !== false) {
    echo "Protocol $protocol has number $number";
} else {
    echo "Protocol $protocol not found";
}

This checks the system's protocol database for the TCP protocol number. TCP is commonly used for reliable network communication.

Checking Multiple Protocols

This example checks multiple protocol names and displays their numbers.

multi_protocol.php
<?php

declare(strict_types=1);

$protocols = ["tcp", "udp", "icmp", "ip"];

foreach ($protocols as $proto) {
    $num = getprotobyname($proto);
    echo "$proto: " . ($num !== false ? $num : "Not found") . "\n";
}

This provides a quick reference for common protocol numbers. Different protocols serve different purposes in network communication.

Error Handling

This example shows proper error handling when a protocol isn't found.

error_handling.php
<?php

declare(strict_types=1);

$protocol = "nonexistent";
$number = getprotobyname($protocol);

if ($number === false) {
    throw new RuntimeException("Protocol $protocol not found in database");
}

echo "Protocol number: $number";

Always check for false return values when the protocol might not exist. This prevents undefined behavior in network applications.

Socket Creation Example

This demonstrates using getprotobyname in socket creation.

socket_creation.php
<?php

declare(strict_types=1);

$protocol = "tcp";
$proto_num = getprotobyname($protocol);

if ($proto_num === false) {
    die("Cannot get protocol number for $protocol");
}

$socket = socket_create(AF_INET, SOCK_STREAM, $proto_num);
if ($socket === false) {
    die("Socket creation failed: " . socket_strerror(socket_last_error()));
}

echo "TCP socket created successfully";

This shows practical use in network programming where protocol numbers are required for socket operations.

Protocol Validation Function

This creates a reusable function to validate protocol names.

protocol_validator.php
<?php

declare(strict_types=1);

function validateProtocol(string $name): bool {
    return getprotobyname($name) !== false;
}

$test_protocols = ["udp", "icmp", "fake_proto"];

foreach ($test_protocols as $proto) {
    $status = validateProtocol($proto) ? "valid" : "invalid";
    echo "$proto is $status\n";
}

This function provides a clean way to check if a protocol name exists in the system database before using it.

Best Practices

Source

PHP getprotobyname Documentation

This tutorial covered the PHP getprotobyname function with practical examples for protocol name to number conversion in network programming.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all PHP Network Functions.