Linux passes bind tests

This commit is contained in:
Ryan Dahl 2011-04-25 20:08:56 -07:00
parent a6430f4121
commit 1d9e1850f6
3 changed files with 16 additions and 33 deletions

View File

@ -80,10 +80,13 @@ int oio_flag_is_set(oio_handle* handle, int flag) {
static oio_err_code oio_translate_sys_error(int sys_errno) {
switch (sys_errno) {
case 0: return OIO_OK;
case EACCES: return OIO_EACCESS;
case EFAULT: return OIO_EFAULT;
case EMFILE: return OIO_EMFILE;
case EINVAL: return OIO_EINVAL;
case ECONNREFUSED: return OIO_ECONNREFUSED;
case EADDRINUSE: return OIO_EADDRINUSE;
case EADDRNOTAVAIL: return OIO_EADDRNOTAVAIL;
default: return OIO_UNKNOWN;
}
}
@ -186,11 +189,21 @@ int oio_bind(oio_handle* handle, struct sockaddr* addr) {
if (addr->sa_family == AF_INET) {
addrsize = sizeof(struct sockaddr_in);
domain = AF_INET;
struct sockaddr_in* addr_in = (struct sockaddr_in*)addr;
/* For platform compat, if the address is 255.255.255.255 then we must
* return EACCESS. */
if (addr_in->sin_addr.s_addr == 0xFFFFFFFF) {
oio_err_new(handle, EACCES);
return -1;
}
} else if (addr->sa_family == AF_INET6) {
addrsize = sizeof(struct sockaddr_in6);
domain = AF_INET6;
} else {
assert(0);
oio_err_new(handle, EFAULT);
return -1;
}

View File

@ -46,8 +46,6 @@ TEST_IMPL(bind_error_access) {
r = oio_tcp_init(&server, close_cb, NULL);
ASSERT(r == 0);
r = oio_bind(&server, (struct sockaddr*) &addr);
ASSERT(r == 0);
r = oio_listen(&server, 128, NULL);
ASSERT(r == -1);
ASSERT(oio_last_error().code == OIO_EACCESS);
@ -107,10 +105,7 @@ TEST_IMPL(bind_error_addrnotavail) {
r = oio_tcp_init(&server, close_cb, NULL);
ASSERT(r == 0);
r = oio_bind(&server, (struct sockaddr*) &addr);
ASSERT(r == 0);
r = oio_listen(&server, 128, NULL);
ASSERT(r == -1);
ASSERT(oio_last_error().code == OIO_EADDRNOTAVAIL);
oio_close(&server);
@ -146,29 +141,7 @@ TEST_IMPL(bind_error_fault_1) {
return 0;
}
TEST_IMPL(bind_error_fault_2) {
oio_handle server;
int r;
oio_init();
r = oio_tcp_init(&server, close_cb, NULL);
ASSERT(r == 0);
r = oio_bind(&server, (struct sockaddr*) NULL);
ASSERT(r == -1);
ASSERT(oio_last_error().code == OIO_EFAULT);
oio_close(&server);
oio_run();
ASSERT(close_cb_called == 1);
return 0;
}
/* Notes: On Linux oio_bind(server, NULL) will segfault the program. */
TEST_IMPL(bind_error_inval) {
struct sockaddr_in addr1 = oio_ip4_addr("0.0.0.0", TEST_PORT);
@ -194,4 +167,4 @@ TEST_IMPL(bind_error_inval) {
ASSERT(close_cb_called == 1);
return 0;
}
}

View File

@ -26,7 +26,6 @@ TEST_DECLARE (bind_error_access)
TEST_DECLARE (bind_error_addrinuse)
TEST_DECLARE (bind_error_addrnotavail)
TEST_DECLARE (bind_error_fault_1)
TEST_DECLARE (bind_error_fault_2)
TEST_DECLARE (bind_error_inval)
TEST_DECLARE (connection_fail)
TEST_DECLARE (close_cb_stack)
@ -54,8 +53,6 @@ TASK_LIST_START
TEST_ENTRY (bind_error_fault_1)
TEST_ENTRY (bind_error_fault_2)
TEST_ENTRY (bind_error_inval)
TEST_ENTRY (connection_fail)