diff options
author | William Harrington <kb0iic@berzerkula.org> | 2025-01-14 16:06:02 -0600 |
---|---|---|
committer | William Harrington <kb0iic@berzerkula.org> | 2025-01-14 16:06:02 -0600 |
commit | 0cc9b20c15460213e488bf5e70963b941482f628 (patch) | |
tree | bb0143245583ec846630f39bfa2258dba640ccd7 /sdk/net/getservice.c | |
parent | 0e084ade5069756d487b5c948c48b777e37c00c9 (diff) |
Add source.
Diffstat (limited to 'sdk/net/getservice.c')
-rw-r--r-- | sdk/net/getservice.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/sdk/net/getservice.c b/sdk/net/getservice.c new file mode 100644 index 0000000..fed448e --- /dev/null +++ b/sdk/net/getservice.c @@ -0,0 +1,45 @@ +/* + * Simple portable service name lookup. + * $Id$ + * Copyright (c) 1997 by Tycho Softworks. + * For conditions of distribution and reuse see product license. + */ + +#include <net/socket.h> +#include <std/string.h> + +int getservice(const char *service) +{ + char servname[32]; + char *p; + struct servent *svc; + struct protoent *proto; + + if(isdigit(*service)) + return atoi(service); + + strcpy(servname, service); + p = strchr(servname, '/'); + if(!p) + strcat(servname, "/tcp"); + + p = strchr(servname, '/'); + *(p++) = 0; + if(isdigit(*p)) + { + proto = getprotobynumber(atoi(p)); + if(!proto) + return 0; + + p = proto->p_name; + } + svc = getservbyname(servname, p); + if(!svc) + return 0; + + return ntohs(svc->s_port); +} + + + + |