Linux passes bind tests
This commit is contained in:
parent
a6430f4121
commit
1d9e1850f6
15
oio-unix.c
15
oio-unix.c
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user