remove c_sa_len

This commit is contained in:
Sukchan Lee
2017-11-22 22:55:28 +09:00
parent a27f294f74
commit cfc352ea0d
5 changed files with 49 additions and 27 deletions

View File

@@ -64,8 +64,6 @@ typedef struct c_sockaddr_t c_sockaddr_t;
struct c_sockaddr_t {
c_sockaddr_t *next;
socklen_t c_sa_len;
socklen_t c_sa_port;
#define c_sa_family sa.sa_family
#define c_sa_port sin.sin_port
union {
@@ -177,6 +175,7 @@ CORE_DECLARE(const char *)core_inet_ntop(c_sockaddr_t *sockaddr,
CORE_DECLARE(status_t) core_inet_pton(
int family, const char *src, c_sockaddr_t *dst);
CORE_DECLARE(socklen_t) sockaddr_len(const c_sockaddr_t *sa);
CORE_DECLARE(int) sockaddr_is_equal(c_sockaddr_t *a, c_sockaddr_t *b);
#ifdef __cplusplus

View File

@@ -179,11 +179,15 @@ int core_sctp_sendmsg(sock_id id, const void *msg, size_t len,
{
sock_t *sock = (sock_t *)id;
int size;
socklen_t addrlen = 0;
d_assert(id, return -1, );
if (to)
addrlen = sockaddr_len(to);
size = sctp_sendmsg(sock->fd, msg, len,
to ? &to->sa : NULL, to ? to->c_sa_len : 0,
to ? &to->sa : NULL, addrlen,
htonl(ppid),
0, /* flags */
stream_no,
@@ -203,17 +207,20 @@ int core_sctp_recvmsg(sock_id id, void *msg, size_t len,
{
sock_t *sock = (sock_t *)id;
int size;
socklen_t addrlen = sizeof(struct sockaddr_storage);
socklen_t addrlen = 0;
int flags = 0;
struct sctp_sndrcvinfo sinfo;
d_assert(id, return -1,);
if (from)
addrlen = sockaddr_len(from);
do
{
size = sctp_recvmsg(sock->fd, msg, len,
from ? &from->sa : NULL, from ? &addrlen : NULL,
from ? &from->sa : NULL, addrlen,
&sinfo, &flags);
if (size < 0)
{
@@ -222,8 +229,6 @@ int core_sctp_recvmsg(sock_id id, void *msg, size_t len,
return size;
}
if (from)
from->c_sa_len = addrlen;
if (!(flags & MSG_NOTIFICATION))
break;

View File

@@ -93,11 +93,15 @@ status_t sock_bind(sock_id id, c_sockaddr_t *sa)
{
sock_t *sock = (sock_t *)id;
char buf[CORE_ADDRSTRLEN];
socklen_t addrlen;
d_assert(sock, return CORE_ERROR,);
d_assert(sa, return CORE_ERROR,);
if (bind(sock->fd, &sa->sa, sa->c_sa_len) != 0)
addrlen = sockaddr_len(sa);
d_assert(addrlen, return CORE_ERROR,);
if (bind(sock->fd, &sa->sa, addrlen) != 0)
{
d_error("socket bind(%s:%d) failed(%d:%s)",
CORE_NTOP(sa, buf), sa->sin.sin_port, errno, strerror(errno));
@@ -115,11 +119,15 @@ status_t sock_connect(sock_id id, c_sockaddr_t *sa)
{
sock_t *sock = (sock_t *)id;
char buf[CORE_ADDRSTRLEN];
socklen_t addrlen;
d_assert(sock, return CORE_ERROR,);
d_assert(sa, return CORE_ERROR,);
if (connect(sock->fd, &sa->sa, sa->c_sa_len) != 0)
addrlen = sockaddr_len(sa);
d_assert(addrlen, return CORE_ERROR,);
if (connect(sock->fd, &sa->sa, addrlen) != 0)
{
d_error("socket connect(%s:%d) failed(%d:%s)",
CORE_NTOP(sa, buf), sa->sin.sin_port, errno, strerror(errno));
@@ -156,13 +164,14 @@ status_t sock_accept(sock_id *new, sock_id id)
int new_fd = -1;
c_sockaddr_t sa;
socklen_t addrlen;
memset(&sa, 0, sizeof(sa));
sa.c_sa_len = sizeof(sa.ss);
addrlen = sizeof(sa.ss);
d_assert(id, return CORE_ERROR,);
new_fd = accept(sock->fd, &sa.sa, &sa.c_sa_len);
new_fd = accept(sock->fd, &sa.sa, &addrlen);
if (new_fd < 0)
{
d_error("accept failed(%d:%s)", errno, strerror(errno));
@@ -190,14 +199,14 @@ int sock_family_get(sock_id id)
return sock->family;
}
c_sockaddr_t * sock_local_addr_get(sock_id id)
c_sockaddr_t *sock_local_addr_get(sock_id id)
{
sock_t *sock = (sock_t *)id;
d_assert(id, return NULL,);
return &sock->local_addr;
}
c_sockaddr_t * sock_remote_addr_get(sock_id id)
c_sockaddr_t *sock_remote_addr_get(sock_id id)
{
sock_t *sock = (sock_t *)id;
d_assert(id, return NULL,);
@@ -227,11 +236,15 @@ ssize_t core_sendto(sock_id id,
{
sock_t *sock = (sock_t *)id;
ssize_t size;
socklen_t addrlen;
d_assert(id, return -1,);
d_assert(to, return -1,);
size = sendto(sock->fd, buf, len, flags, &to->sa, to->c_sa_len);
addrlen = sockaddr_len(to);
d_assert(addrlen, return CORE_ERROR,);
size = sendto(sock->fd, buf, len, flags, &to->sa, addrlen);
if (size < 0)
{
d_error("sock_sendto(len:%ld) failed(%d:%s)",
@@ -268,14 +281,15 @@ ssize_t core_recvfrom(sock_id id,
d_assert(id, return -1,);
d_assert(from, return -1,);
addrlen = sizeof(from->ss);
addrlen = sockaddr_len(from);
d_assert(addrlen, return -1,);
size = recvfrom(sock->fd, buf, len, flags, &from->sa, &addrlen);
if (size < 0)
{
d_error("sock_recvfrom(len:%ld) failed(%d:%s)",
len, errno, strerror(errno));
}
from->c_sa_len = addrlen;
return size;
}
@@ -471,7 +485,6 @@ status_t core_getaddrinfo(c_sockaddr_t **sa,
new_sa = core_calloc(1, sizeof(c_sockaddr_t));
memcpy(&new_sa->sa, ai->ai_addr, ai->ai_addrlen);
new_sa->c_sa_len = ai->ai_addrlen;
new_sa->sin.sin_port = htons(port);
d_trace(3, "addr:%s, port:%d\n", CORE_NTOP(new_sa, buf), port);
@@ -539,11 +552,9 @@ status_t core_inet_pton(int family, const char *src, c_sockaddr_t *dst)
switch(family)
{
case AF_INET:
dst->c_sa_len = sizeof(struct sockaddr_in);
return inet_pton(family, src, &dst->sin.sin_addr) == 1 ?
CORE_OK : CORE_ERROR;
case AF_INET6:
dst->c_sa_len = sizeof(struct sockaddr_in6);
return inet_pton(family, src, &dst->sin6.sin6_addr) == 1 ?
CORE_OK : CORE_ERROR;
default:
@@ -551,6 +562,21 @@ status_t core_inet_pton(int family, const char *src, c_sockaddr_t *dst)
}
}
socklen_t sockaddr_len(const c_sockaddr_t *sa)
{
d_assert(sa, return 0,);
switch(sa->c_sa_family)
{
case AF_INET:
return sizeof(struct sockaddr_in);
case AF_INET6:
return sizeof(struct sockaddr_in6);
default:
d_assert(0, return 0, "Unknown family(%d)", sa->c_sa_family);
}
}
int sockaddr_is_equal(c_sockaddr_t *a, c_sockaddr_t *b)
{
d_assert(a, return 0,);

View File

@@ -135,7 +135,6 @@ static void sctp_test3(abts_case *tc, void *data)
size = core_sctp_recvmsg(sctp, str, STRLEN, &sa, &ppid, NULL);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
ABTS_INT_EQUAL(tc, sizeof(struct sockaddr_in), sa.c_sa_len);
ABTS_INT_EQUAL(tc, PPID, ppid);
ABTS_STR_EQUAL(tc, "127.0.0.1", CORE_NTOP(&sa, buf));
@@ -191,7 +190,6 @@ static void sctp_test4(abts_case *tc, void *data)
size = core_sctp_recvmsg(sctp, str, STRLEN, &sa, &ppid, NULL);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
ABTS_INT_EQUAL(tc, sizeof(struct sockaddr_in6), sa.c_sa_len);
ABTS_STR_EQUAL(tc, "::1", CORE_NTOP(&sa, buf));
ABTS_INT_EQUAL(tc, PPID, ppid);
@@ -223,7 +221,6 @@ static void *THREAD_FUNC test5_main(thread_id id, void *data)
rv = sctp_connect(sctp, "::1", PORT);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
remote_addr = sock_remote_addr_get(sctp);
ABTS_INT_EQUAL(tc, sizeof(struct sockaddr_in6), remote_addr->c_sa_len);
ABTS_STR_EQUAL(tc, "::1", CORE_NTOP(remote_addr, buf));
size = core_sctp_sendmsg(sctp, DATASTR, strlen(DATASTR),
@@ -232,7 +229,6 @@ static void *THREAD_FUNC test5_main(thread_id id, void *data)
size = core_sctp_recvmsg(sctp, str, STRLEN, &sa, &ppid, NULL);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
ABTS_INT_EQUAL(tc, sizeof(struct sockaddr_in6), sa.c_sa_len);
ABTS_STR_EQUAL(tc, "::1", CORE_NTOP(&sa, buf));
ABTS_INT_EQUAL(tc, PPID, ppid);
@@ -262,7 +258,6 @@ static void sctp_test5(abts_case *tc, void *data)
size = core_sctp_recvmsg(sctp, str, STRLEN, &sa, &ppid, NULL);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
ABTS_INT_EQUAL(tc, sizeof(struct sockaddr_in6), sa.c_sa_len);
ABTS_STR_EQUAL(tc, "::1", CORE_NTOP(&sa, buf));
ABTS_INT_EQUAL(tc, PPID, ppid);

View File

@@ -132,7 +132,6 @@ static void sock_test3(abts_case *tc, void *data)
size = core_recvfrom(udp, str, STRLEN, 0, &sa);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
ABTS_INT_EQUAL(tc, sizeof(struct sockaddr_in), sa.c_sa_len);
ABTS_STR_EQUAL(tc, "127.0.0.1", CORE_NTOP(&sa, buf));
thread_join(&rv, test3_thread);
@@ -185,7 +184,6 @@ static void sock_test4(abts_case *tc, void *data)
size = core_recvfrom(udp, str, STRLEN, 0, &sa);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
ABTS_INT_EQUAL(tc, sizeof(struct sockaddr_in), sa.c_sa_len);
ABTS_STR_EQUAL(tc, "127.0.0.1", CORE_NTOP(&sa, buf));
size = core_sendto(udp, DATASTR, strlen(DATASTR), 0, &sa);
@@ -247,7 +245,6 @@ static void sock_test5(abts_case *tc, void *data)
size = core_recvfrom(udp, str, STRLEN, 0, &sa);
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
ABTS_INT_EQUAL(tc, sizeof(struct sockaddr_in6), sa.c_sa_len);
ABTS_STR_EQUAL(tc, "::1", CORE_NTOP(&sa, buf));
size = core_send(udp, DATASTR, strlen(DATASTR), 0);