close socket on error
This commit is contained in:
@@ -96,12 +96,12 @@ static int opensock(unsigned short port)
|
|||||||
if (sock < 0)
|
if (sock < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *) &yes, sizeof yes) != 0)
|
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *) &yes, sizeof yes) != 0)
|
||||||
return -1;
|
goto err;
|
||||||
|
|
||||||
#if HAVE_DECL_SO_NOSIGPIPE
|
#if HAVE_DECL_SO_NOSIGPIPE
|
||||||
if (setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, (void *) &yes, sizeof yes) != 0)
|
if (setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, (void *) &yes, sizeof yes) != 0)
|
||||||
return -1;
|
goto err;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
memset(&server_sockaddr, 0, sizeof server_sockaddr);
|
memset(&server_sockaddr, 0, sizeof server_sockaddr);
|
||||||
@@ -110,17 +110,18 @@ static int opensock(unsigned short port)
|
|||||||
server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
|
server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||||
|
|
||||||
if (bind(sock, (struct sockaddr *) &server_sockaddr,
|
if (bind(sock, (struct sockaddr *) &server_sockaddr,
|
||||||
sizeof server_sockaddr) != 0) {
|
sizeof server_sockaddr) != 0)
|
||||||
close(sock);
|
goto err;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (listen(sock, 0) != 0) {
|
if (listen(sock, 0) != 0)
|
||||||
close(sock);
|
goto err;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return sock;
|
return sock;
|
||||||
|
|
||||||
|
err:
|
||||||
|
close(sock);
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int connectsock(const char *hostname, unsigned short port)
|
static int connectsock(const char *hostname, unsigned short port)
|
||||||
|
|||||||
Reference in New Issue
Block a user