getprotobyname_r - Linux


getprotobyname_r is a standard C library function used to retrieve information about a network protocol based on its name. It is part of the Berkeley Software Distribution (BSD) sockets API and is commonly used to obtain protocol-related details for network programming.


int getprotobyname_r(const char *name, struct protoent *result, char *buffer, size_t buflen, struct protoent **resultp);


  • name: The name of the protocol to be retrieved.
  • result: A pointer to a protoent structure where the protocol information will be stored.
  • buffer: A buffer to hold the information retrieved.
  • buflen: The size of the buffer.
  • resultp: A pointer to the protoent structure returned, or NULL if the protocol is not found.


#include <stdio.h>
#include <netdb.h>

int main() {
    struct protoent *proto;
    char buffer[1024];

    if (getprotobyname_r("tcp", proto, buffer, sizeof(buffer), &proto) == 0) {
        printf("Protocol number: %d\n", proto->p_proto);
    } else {
        printf("Protocol not found\n");

    return 0;

Common Issues

  • Ensure that the buffer provided is large enough to hold the returned information.
  • Verify that the name of the protocol is correct.


getprotobyname_r can be combined with other networking commands, such as getsockopt and setsockopt, to configure and manipulate network connections.

Related Commands

  • getprotobynumber_r: Retrieves protocol information based on its number.
  • getservbyname_r: Retrieves service information based on its name.