getservent_r - Linux
Overview
getservent_r is a Linux function used to retrieve information about Internet services. It iterates through the /etc/services
file to return the service name, port number, and protocol.
Syntax
int getservent_r(struct servent *result_buf, char *buf, int buflen, struct servent **result);
Options/Flags
| Option | Description |
|—|—|
| result_buf
| Pointer to a buffer for storing the service information |
| buf
| Pointer to a buffer for storing the temporary data |
| buflen
| Length of the buf
buffer |
| result
| Pointer to the result_buf
after a successful call |
Examples
Example 1: Getting the port number of the "http" service:
#include <netdb.h>
int main() {
struct servent *result;
if (getservent_r("http", NULL, 0, &result) == 0) {
// Success, port number stored in result->s_port
} else {
// Error handling
}
endservent(); // Release memory allocated by getservent_r
return 0;
}
Example 2: Iterating through all services:
#include <netdb.h>
int main() {
struct servent *result;
while ( (getservent_r(NULL, NULL, 0, &result)) == 0) {
printf("Service: %s, Port: %d\n", result->s_name, result->s_port);
}
endservent();
return 0;
}
Common Issues
- Invalid service name: Check that the service name is spelled correctly and exists in the
/etc/services
file. - Buffer too small: Make sure the
buflen
andbuf
are large enough to hold the service information. - Memory leak: Don’t forget to call
endservent
after usinggetservent_r
to release allocated memory.
Integration
getservent_r is commonly used in network programming to resolve service names to port numbers and protocols. It can be integrated with:
socket
to create sockets and specify service port numbersbind
to bind a socket to a specific service portlisten
to listen for incoming connections on a service port
Related Commands
getservbyport
: Retrieve service information by port numbergetservbyname
: Retrieve service information by service name/etc/services
: The system file containing the service database