class method
Socket.getservbyname
(::String service_proto) -> ::Integer
(::String service_proto, ::String layer4_proto) -> ::Integer
Socket.getservbyname(service_name) => port_number
Socket.getservbyname(service_name, protocol_name) => port_number
ext/socket/socket.c
View on GitHub ↗
static VALUE
sock_s_getservbyname(int argc, VALUE *argv, VALUE _)
{
VALUE service, proto;
struct servent *sp;
long port;
const char *servicename, *protoname = "tcp";
rb_scan_args(argc, argv, "11", &service, &proto);
StringValue(service);
if (!NIL_P(proto)) StringValue(proto);
servicename = StringValueCStr(service);
if (!NIL_P(proto)) protoname = StringValueCStr(proto);
sp = getservbyname(servicename, protoname);
if (sp) {
port = ntohs(sp->s_port);
}
else {
char *end;
port = STRTOUL(servicename, &end, 0);
if (*end != '\0') {
rb_raise(rb_eSocket, "no such service %s/%s", servicename, protoname);
}
}
return INT2FIX(port);
}
Obtains the port number for service_name.
If protocol_name is not given, “tcp” is assumed.
Example
Socket.getservbyname("smtp") #=> 25 Socket.getservbyname("shell") #=> 514 Socket.getservbyname("syslog", "udp") #=> 514
See also
.getnameinfo
.getservbyport
.getifaddrs
.ip_address_list
also in
4.1 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0