aboutsummaryrefslogtreecommitdiff
path: root/libbb/xconnect.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbb/xconnect.c')
-rw-r--r--libbb/xconnect.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/libbb/xconnect.c b/libbb/xconnect.c
index 2eb4cb9be..975844500 100644
--- a/libbb/xconnect.c
+++ b/libbb/xconnect.c
@@ -35,6 +35,19 @@ int FAST_FUNC setsockopt_bindtodevice(int fd, const char *iface)
35 return r; 35 return r;
36} 36}
37 37
38len_and_sockaddr* FAST_FUNC get_sock_lsa(int fd)
39{
40 len_and_sockaddr *lsa;
41 socklen_t len = 0;
42
43 /* Can be optimized to do only one getsockname() */
44 if (getsockname(fd, NULL, &len) != 0)
45 return NULL;
46 lsa = xzalloc(LSA_LEN_SIZE + len);
47 lsa->len = len;
48 getsockname(fd, &lsa->u.sa, &lsa->len);
49 return lsa;
50}
38 51
39void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) 52void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen)
40{ 53{
@@ -51,8 +64,9 @@ void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen)
51 64
52/* Return port number for a service. 65/* Return port number for a service.
53 * If "port" is a number use it as the port. 66 * If "port" is a number use it as the port.
54 * If "port" is a name it is looked up in /etc/services, if it isnt found return 67 * If "port" is a name it is looked up in /etc/services,
55 * default_port */ 68 * if it isnt found return default_port
69 */
56unsigned FAST_FUNC bb_lookup_port(const char *port, const char *protocol, unsigned default_port) 70unsigned FAST_FUNC bb_lookup_port(const char *port, const char *protocol, unsigned default_port)
57{ 71{
58 unsigned port_nr = default_port; 72 unsigned port_nr = default_port;