static int makesock_addrinfo(unsigned l4type, bool passive, struct addrinfo *ai,
struct flowopts *fo)
{
- int ret = -E_MAKESOCK, on = 1, sockfd = -1;
+ int ret = -E_MAKESOCK, on = 1;
for (; ai; ai = ai->ai_next) {
+ int fd;
ret = socket(ai->ai_family, sock_type(l4type), l4type);
if (ret < 0)
continue;
- sockfd = ret;
- flowopt_setopts(sockfd, fo);
+ fd = ret;
+ flowopt_setopts(fd, fo);
if (!passive) {
- if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) == 0)
- return sockfd;
- close(sockfd);
+ if (connect(fd, ai->ai_addr, ai->ai_addrlen) == 0)
+ return fd;
+ close(fd);
continue;
}
/*
* restart (protocols using listen()) and when creating
* multiple listener instances (UDP multicast).
*/
- if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on,
+ if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on,
sizeof(on)) == -1) {
- close(sockfd);
+ close(fd);
continue;
}
- if (bind(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
- close(sockfd);
+ if (bind(fd, ai->ai_addr, ai->ai_addrlen) < 0) {
+ close(fd);
continue;
}
- return sockfd;
+ return fd;
}
return -E_MAKESOCK;
}