diff --git a/libbb/bb_asprintf.c b/libbb/bb_asprintf.c
new file mode 100644
index 0000000..c0c5cde
--- /dev/null
+++ b/libbb/bb_asprintf.c
@@ -0,0 +1,89 @@
+/*
+   Copyright (C) 2002 Vladimir Oleynik <dzo@simtreas.ru>
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+
+#ifdef TEST
+extern void *xrealloc(void *p, size_t size);
+#else
+#include "libbb.h"      /* busybox source */
+#endif
+
+
+/* Exchange glibc vasprintf - minimize allocate memory version */
+/* libc5 and uclibc have not vasprintf function */
+void bb_vasprintf(char **string_ptr, const char *format, va_list args)
+{
+       int   bs = 128;
+       char  stack_buff[128];
+       char *buff = stack_buff;
+       int   done;
+
+       /* two or more loop, first - calculate memory size only */
+       while(1) {
+               done = vsnprintf (buff, bs, format, args);
+/* Different libc have different interpretation vsnprintf returned value */
+               if(done >= 0) {
+                       if(done < bs && buff != stack_buff) {
+                               /* allocated */
+                               *string_ptr = buff;
+                               return;
+                       } else {
+                               /* true calculate memory size */
+                               bs = done+1;
+                       }
+               } else {
+                       /*
+                        * Old libc. Incrementaly test.
+                        * Exact not minimize allocate memory.
+                        */
+                       bs += 128;
+               }
+               buff = xrealloc((buff == stack_buff ? NULL : buff), bs);
+       }
+}
+
+void bb_asprintf(char **string_ptr, const char *format, ...)
+{
+       va_list p;
+
+       va_start(p, format);
+       bb_vasprintf(string_ptr, format, p);
+       va_end(p);
+}
+
+#ifdef TEST
+int main(int argc, char **argv)
+{
+       char *out_buf;
+       char big_buf[200];
+       int i;
+
+       bb_asprintf(&out_buf, "Hi!\nargc=%d argv[0]=%s\n", argc, argv[0]);
+       printf(out_buf);
+       free(out_buf);
+
+       for(i=0; i < sizeof(big_buf)-1; i++)
+               big_buf[i]='x';
+       big_buf[i]=0;
+       bb_asprintf(&out_buf, "Test Big\n%s\n", big_buf);
+       printf(out_buf);
+       free(out_buf);
+
+       return 0;
+}
+
+void *xrealloc(void *p, size_t size)
+{
+       void *p2 = realloc(p, size);
+       if(p2==0) {
+               fprintf(stderr, "TEST: memory_exhausted\n");
+               exit(1);
+       }
+       return p2;
+}
+#endif
diff --git a/libbb/xconnect.c b/libbb/xconnect.c
index 9e77149..f3a1b44 100644
--- a/libbb/xconnect.c
+++ b/libbb/xconnect.c
@@ -6,7 +6,6 @@
  *
  */
 
-#include "inet_common.h"
 #include <unistd.h>
 #include <string.h>
 #include <stdlib.h>
@@ -58,7 +57,7 @@
 	struct sockaddr_in s_addr;
 	int s = socket(AF_INET, SOCK_STREAM, 0);
 	struct servent *tserv;
-	int port_nr=atoi(port);
+	int port_nr=htons(atoi(port));
 	struct hostent * he;
 
 	if (port_nr==0 && (tserv = getservbyname(port, "tcp")) != NULL)
@@ -66,7 +65,7 @@
 
 	memset(&s_addr, 0, sizeof(struct sockaddr_in));
 	s_addr.sin_family = AF_INET;
-	s_addr.sin_port = htons(port_nr);
+	s_addr.sin_port = port_nr;
 
 	he = xgethostbyname(host);
 	memcpy(&s_addr.sin_addr, he->h_addr, sizeof s_addr.sin_addr);
