install C version of _doprnt
[unix-history] / usr / src / lib / libc / net / getservbyport.c
index 9136d38..4015f19 100644 (file)
@@ -1,7 +1,23 @@
-/*     getservbyport.c 4.2     82/10/05        */
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of California at Berkeley. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)getservbyport.c    5.4 (Berkeley) %G%";
+#endif /* LIBC_SCCS and not lint */
 
 #include <netdb.h>
 
 
 #include <netdb.h>
 
+extern int _serv_stayopen;
+
 struct servent *
 getservbyport(port, proto)
        int port;
 struct servent *
 getservbyport(port, proto)
        int port;
@@ -9,13 +25,14 @@ getservbyport(port, proto)
 {
        register struct servent *p;
 
 {
        register struct servent *p;
 
-       setservent(0);
+       setservent(_serv_stayopen);
        while (p = getservent()) {
                if (p->s_port != port)
                        continue;
                if (proto == 0 || strcmp(p->s_proto, proto) == 0)
                        break;
        }
        while (p = getservent()) {
                if (p->s_port != port)
                        continue;
                if (proto == 0 || strcmp(p->s_proto, proto) == 0)
                        break;
        }
-       endservent();
+       if (!_serv_stayopen)
+               endservent();
        return (p);
 }
        return (p);
 }