Method: Socket.getservbyname
- Defined in:
- socket.c
.getservbyname(service_name) ⇒ Object .getservbyname(service_name, protocol_name) ⇒ Object
Obtains the port number for service_name.
If protocol_name is not given, “tcp” is assumed.
Socket.getservbyname("smtp") #=> 25
Socket.getservbyname("shell") #=> 514
Socket.getservbyname("syslog", "udp") #=> 514
1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 |
# File 'socket.c', line 1106 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); } |