diff options
Diffstat (limited to 'libbb/xconnect.c')
-rw-r--r-- | libbb/xconnect.c | 18 |
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 | ||
38 | len_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 | ||
39 | void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) | 52 | void 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 | */ | ||
56 | unsigned FAST_FUNC bb_lookup_port(const char *port, const char *protocol, unsigned default_port) | 70 | unsigned 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; |