2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-31 22:45:39 +00:00

add ISC_R_NOTBOUND and ISC_R_NOTCONNECTED and return them where appropriate.

This commit is contained in:
Michael Graff
2000-05-11 05:43:53 +00:00
parent dcd66bf966
commit 8321dd2150
3 changed files with 27 additions and 8 deletions

View File

@@ -42,7 +42,7 @@
#define ISC_R_EXISTS 18 #define ISC_R_EXISTS 18
#define ISC_R_NOSPACE 19 /* ran out of space */ #define ISC_R_NOSPACE 19 /* ran out of space */
#define ISC_R_CANCELED 20 #define ISC_R_CANCELED 20
/* AVAILABLE CODE 21 */ #define ISC_R_NOTBOUND 21 /* socket is not bound */
#define ISC_R_SHUTTINGDOWN 22 /* shutting down */ #define ISC_R_SHUTTINGDOWN 22 /* shutting down */
#define ISC_R_NOTFOUND 23 #define ISC_R_NOTFOUND 23
#define ISC_R_UNEXPECTEDEND 24 /* unexpected end of input */ #define ISC_R_UNEXPECTEDEND 24 /* unexpected end of input */
@@ -61,8 +61,9 @@
#define ISC_R_MASKNONCONTIG 37 #define ISC_R_MASKNONCONTIG 37
#define ISC_R_FILENOTFOUND 38 #define ISC_R_FILENOTFOUND 38
#define ISC_R_FILEEXISTS 39 #define ISC_R_FILEEXISTS 39
#define ISC_R_NOTCONNECTED 40 /* socket is not connected */
#define ISC_R_NRESULTS 40 /* Number of results */ #define ISC_R_NRESULTS 41 /* Number of results */
ISC_LANG_BEGINDECLS ISC_LANG_BEGINDECLS

View File

@@ -57,7 +57,7 @@ static char *text[ISC_R_NRESULTS] = {
"already exists", /* 18 */ "already exists", /* 18 */
"ran out of space", /* 19 */ "ran out of space", /* 19 */
"operation canceled", /* 20 */ "operation canceled", /* 20 */
"<available code 21>", /* 21 */ "socket is not bound", /* 21 */
"shutting down", /* 22 */ "shutting down", /* 22 */
"not found", /* 23 */ "not found", /* 23 */
"unexpected end of input", /* 24 */ "unexpected end of input", /* 24 */
@@ -75,7 +75,8 @@ static char *text[ISC_R_NRESULTS] = {
"ignore", /* 36 */ "ignore", /* 36 */
"address mask not contiguous", /* 37 */ "address mask not contiguous", /* 37 */
"file not found", /* 38 */ "file not found", /* 38 */
"file already exists" /* 39 */ "file already exists", /* 39 */
"socket is not connected" /* 40 */
}; };
#define ISC_RESULT_RESULTSET 2 #define ISC_RESULT_RESULTSET 2

View File

@@ -2887,38 +2887,55 @@ internal_connect(isc_task_t *me, isc_event_t *ev)
isc_result_t isc_result_t
isc_socket_getpeername(isc_socket_t *sock, isc_sockaddr_t *addressp) isc_socket_getpeername(isc_socket_t *sock, isc_sockaddr_t *addressp)
{ {
isc_result_t ret;
REQUIRE(VALID_SOCKET(sock)); REQUIRE(VALID_SOCKET(sock));
REQUIRE(addressp != NULL); REQUIRE(addressp != NULL);
LOCK(&sock->lock); LOCK(&sock->lock);
*addressp = sock->address; if (sock->connected) {
*addressp = sock->address;
ret = ISC_R_SUCCESS;
} else {
ret = ISC_R_NOTCONNECTED;
}
UNLOCK(&sock->lock); UNLOCK(&sock->lock);
return (ISC_R_SUCCESS); return (ret);
} }
isc_result_t isc_result_t
isc_socket_getsockname(isc_socket_t *sock, isc_sockaddr_t *addressp) isc_socket_getsockname(isc_socket_t *sock, isc_sockaddr_t *addressp)
{ {
ISC_SOCKADDR_LEN_T len; ISC_SOCKADDR_LEN_T len;
isc_result_t ret;
REQUIRE(VALID_SOCKET(sock)); REQUIRE(VALID_SOCKET(sock));
REQUIRE(addressp != NULL); REQUIRE(addressp != NULL);
LOCK(&sock->lock); LOCK(&sock->lock);
if (!sock->bound) {
ret = ISC_R_NOTBOUND;
goto out;
}
ret = ISC_R_SUCCESS;
len = sizeof addressp->type; len = sizeof addressp->type;
if (getsockname(sock->fd, &addressp->type.sa, (void *)&len) < 0) { if (getsockname(sock->fd, &addressp->type.sa, (void *)&len) < 0) {
UNEXPECTED_ERROR(__FILE__, __LINE__, UNEXPECTED_ERROR(__FILE__, __LINE__,
"getsockname: %s", strerror(errno)); "getsockname: %s", strerror(errno));
UNLOCK(&sock->lock); ret = ISC_R_UNEXPECTED;
return (ISC_R_UNEXPECTED); goto out;
} }
addressp->length = (unsigned int)len; addressp->length = (unsigned int)len;
out:
UNLOCK(&sock->lock); UNLOCK(&sock->lock);
return (ISC_R_SUCCESS); return (ISC_R_SUCCESS);
} }