Changeset 26de91a in mainline for uspace/lib
- Timestamp:
- 2013-10-04T17:19:20Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9749e47
- Parents:
- e2839d7
- Location:
- uspace/lib
- Files:
-
- 3 edited
-
c/generic/inet/addr.c (modified) (1 diff)
-
c/include/inet/addr.h (modified) (2 diffs)
-
http/http.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/inet/addr.c
re2839d7 r26de91a 636 636 } 637 637 638 int inet_addr_sockaddr(const inet_addr_t *addr, uint16_t port, 639 sockaddr_t **nsockaddr, socklen_t *naddrlen) 640 { 641 sockaddr_in_t *sa4; 642 sockaddr_in6_t *sa6; 643 644 switch (addr->version) { 645 case ip_v4: 646 sa4 = calloc(1, sizeof(sockaddr_in_t)); 647 if (sa4 == NULL) 648 return ENOMEM; 649 650 sa4->sin_family = AF_INET; 651 sa4->sin_port = host2uint16_t_be(port); 652 sa4->sin_addr.s_addr = host2uint32_t_be(addr->addr); 653 if (nsockaddr != NULL) 654 *nsockaddr = (sockaddr_t *)sa4; 655 if (naddrlen != NULL) 656 *naddrlen = sizeof(*sa4); 657 break; 658 case ip_v6: 659 sa6 = calloc(1, sizeof(sockaddr_in6_t)); 660 if (sa6 == NULL) 661 return ENOMEM; 662 663 sa6->sin6_family = AF_INET6; 664 sa6->sin6_port = host2uint16_t_be(port); 665 host2addr128_t_be(addr->addr6, sa6->sin6_addr.s6_addr); 666 if (nsockaddr != NULL) 667 *nsockaddr = (sockaddr_t *)sa6; 668 if (naddrlen != NULL) 669 *naddrlen = sizeof(*sa6); 670 break; 671 default: 672 assert(false); 673 break; 674 } 675 676 return EOK; 677 } 678 638 679 /** @} 639 680 */ -
uspace/lib/c/include/inet/addr.h
re2839d7 r26de91a 39 39 #include <net/in.h> 40 40 #include <net/in6.h> 41 #include <net/socket.h> 41 42 42 43 typedef uint32_t addr32_t; … … 135 136 136 137 extern ip_ver_t ipver_from_af(int af); 138 extern int inet_addr_sockaddr(const inet_addr_t *, uint16_t, sockaddr_t **, 139 socklen_t *); 137 140 138 141 #endif -
uspace/lib/http/http.c
re2839d7 r26de91a 174 174 } 175 175 176 struct sockaddr_in addr; 177 struct sockaddr_in6 addr6; 178 uint16_t af = inet_addr_sockaddr_in(&http->addr, &addr, &addr6); 179 180 http->conn_sd = socket(PF_INET, SOCK_STREAM, 0); 176 struct sockaddr *saddr; 177 socklen_t saddrlen; 178 179 rc = inet_addr_sockaddr(&http->addr, http->port, &saddr, &saddrlen); 180 if (rc != EOK) { 181 assert(rc == ENOMEM); 182 return ENOMEM; 183 } 184 185 http->conn_sd = socket(saddr->sa_family, SOCK_STREAM, 0); 181 186 if (http->conn_sd < 0) 182 187 return http->conn_sd; 183 188 184 switch (af) { 185 case AF_INET: 186 addr.sin_port = htons(http->port); 187 rc = connect(http->conn_sd, (struct sockaddr *) &addr, sizeof(addr)); 188 break; 189 case AF_INET6: 190 addr6.sin6_port = htons(http->port); 191 rc = connect(http->conn_sd, (struct sockaddr *) &addr6, sizeof(addr6)); 192 break; 193 default: 194 return ENOTSUP; 195 } 189 rc = connect(http->conn_sd, saddr, saddrlen); 190 free(saddr); 196 191 197 192 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.
