prefix SOCKET symbols with rk_

This commit is contained in:
Love Hornquist Astrand
2009-11-25 05:29:18 +01:00
parent 2f290bdd96
commit f1c0c1bba3
21 changed files with 272 additions and 310 deletions

View File

@@ -217,7 +217,7 @@ parse_ports(krb5_context context,
*/
struct descr {
SOCKET s;
krb5_socket_t s;
int type;
int port;
unsigned char *buf;
@@ -235,7 +235,7 @@ init_descr(struct descr *d)
{
memset(d, 0, sizeof(*d));
d->sa = (struct sockaddr *)&d->__ss;
d->s = INVALID_SOCKET;
d->s = rk_INVALID_SOCKET;
}
/*
@@ -271,7 +271,7 @@ init_socket(krb5_context context,
if (ret) {
krb5_warn(context, ret, "krb5_addr2sockaddr");
closesocket(d->s);
d->s = INVALID_SOCKET;
d->s = rk_INVALID_SOCKET;
return;
}
@@ -279,9 +279,9 @@ init_socket(krb5_context context,
return;
d->s = socket(family, type, 0);
if(IS_BAD_SOCKET(d->s)){
if(rk_IS_BAD_SOCKET(d->s)){
krb5_warn(context, errno, "socket(%d, %d, 0)", family, type);
d->s = INVALID_SOCKET;
d->s = rk_INVALID_SOCKET;
return;
}
#if defined(HAVE_SETSOCKOPT) && defined(SOL_SOCKET) && defined(SO_REUSEADDR)
@@ -293,24 +293,24 @@ init_socket(krb5_context context,
d->type = type;
d->port = port;
if(IS_SOCKET_ERROR(bind(d->s, sa, sa_size))){
if(rk_IS_SOCKET_ERROR(bind(d->s, sa, sa_size))){
char a_str[256];
size_t len;
krb5_print_address (a, a_str, sizeof(a_str), &len);
krb5_warn(context, errno, "bind %s/%d", a_str, ntohs(port));
closesocket(d->s);
d->s = INVALID_SOCKET;
d->s = rk_INVALID_SOCKET;
return;
}
if(type == SOCK_STREAM && IS_SOCKET_ERROR(listen(d->s, SOMAXCONN))){
if(type == SOCK_STREAM && rk_IS_SOCKET_ERROR(listen(d->s, SOMAXCONN))){
char a_str[256];
size_t len;
krb5_print_address (a, a_str, sizeof(a_str), &len);
krb5_warn(context, errno, "listen %s/%d", a_str, ntohs(port));
closesocket(d->s);
d->s = INVALID_SOCKET;
d->s = rk_INVALID_SOCKET;
return;
}
}
@@ -348,7 +348,7 @@ init_sockets(krb5_context context,
for (j = 0; j < addresses.len; ++j) {
init_socket(context, config, &d[num], &addresses.val[j],
ports[i].family, ports[i].type, ports[i].port);
if(d[num].s != INVALID_SOCKET){
if(d[num].s != rk_INVALID_SOCKET){
char a_str[80];
size_t len;
@@ -423,15 +423,16 @@ send_reply(krb5_context context,
l[1] = (reply->length >> 16) & 0xff;
l[2] = (reply->length >> 8) & 0xff;
l[3] = reply->length & 0xff;
if(IS_SOCKET_ERROR(sendto(d->s, l, sizeof(l), 0, d->sa, d->sock_len))) {
if(rk_IS_SOCKET_ERROR(sendto(d->s, l, sizeof(l), 0, d->sa, d->sock_len))) {
kdc_log (context, config,
0, "sendto(%s): %s", d->addr_string, strerror(SOCK_ERRNO));
0, "sendto(%s): %s", d->addr_string,
strerror(rk_SOCK_ERRNO));
return;
}
}
if(IS_SOCKET_ERROR(sendto(d->s, reply->data, reply->length, 0, d->sa, d->sock_len))) {
kdc_log (context, config,
0, "sendto(%s): %s", d->addr_string, strerror(SOCK_ERRNO));
if(rk_IS_SOCKET_ERROR(sendto(d->s, reply->data, reply->length, 0, d->sa, d->sock_len))) {
kdc_log (context, config, 0, "sendto(%s): %s", d->addr_string,
strerror(rk_SOCK_ERRNO));
return;
}
}
@@ -489,8 +490,8 @@ handle_udp(krb5_context context,
d->sock_len = sizeof(d->__ss);
n = recvfrom(d->s, buf, max_request, 0, d->sa, &d->sock_len);
if(IS_SOCKET_ERROR(n))
krb5_warn(context, SOCK_ERRNO, "recvfrom");
if(rk_IS_SOCKET_ERROR(n))
krb5_warn(context, rk_SOCK_ERRNO, "recvfrom");
else {
addr_to_string (context, d->sa, d->sock_len,
d->addr_string, sizeof(d->addr_string));
@@ -523,9 +524,9 @@ clear_descr(struct descr *d)
if(d->buf)
memset(d->buf, 0, d->size);
d->len = 0;
if(d->s != INVALID_SOCKET)
if(d->s != rk_INVALID_SOCKET)
closesocket(d->s);
d->s = INVALID_SOCKET;
d->s = rk_INVALID_SOCKET;
}
@@ -559,15 +560,15 @@ add_new_tcp (krb5_context context,
krb5_kdc_configuration *config,
struct descr *d, int parent, int child)
{
SOCKET s;
krb5_socket_t s;
if (child == -1)
return;
d[child].sock_len = sizeof(d[child].__ss);
s = accept(d[parent].s, d[child].sa, &d[child].sock_len);
if(IS_BAD_SOCKET(s)) {
krb5_warn(context, SOCK_ERRNO, "accept");
if(rk_IS_BAD_SOCKET(s)) {
krb5_warn(context, rk_SOCK_ERRNO, "accept");
return;
}
@@ -720,14 +721,14 @@ handle_http_tcp (krb5_context context,
kdc_log(context, config, 0, "HTTP request from %s is non KDC request", d->addr_string);
kdc_log(context, config, 5, "HTTP request: %s", t);
free(data);
if (IS_SOCKET_ERROR(send(d->s, proto, strlen(proto), 0))) {
if (rk_IS_SOCKET_ERROR(send(d->s, proto, strlen(proto), 0))) {
kdc_log(context, config, 0, "HTTP write failed: %s: %s",
d->addr_string, strerror(SOCK_ERRNO));
d->addr_string, strerror(rk_SOCK_ERRNO));
return -1;
}
if (IS_SOCKET_ERROR(send(d->s, msg, strlen(msg), 0))) {
if (rk_IS_SOCKET_ERROR(send(d->s, msg, strlen(msg), 0))) {
kdc_log(context, config, 0, "HTTP write failed: %s: %s",
d->addr_string, strerror(SOCK_ERRNO));
d->addr_string, strerror(rk_SOCK_ERRNO));
return -1;
}
return -1;
@@ -740,16 +741,16 @@ handle_http_tcp (krb5_context context,
"Pragma: no-cache\r\n"
"Content-type: application/octet-stream\r\n"
"Content-transfer-encoding: binary\r\n\r\n";
if (IS_SOCKET_ERROR(send(d->s, proto, strlen(proto), 0))) {
if (rk_IS_SOCKET_ERROR(send(d->s, proto, strlen(proto), 0))) {
free(data);
kdc_log(context, config, 0, "HTTP write failed: %s: %s",
d->addr_string, strerror(SOCK_ERRNO));
d->addr_string, strerror(rk_SOCK_ERRNO));
return -1;
}
if (IS_SOCKET_ERROR(send(d->s, msg, strlen(msg), 0))) {
if (rk_IS_SOCKET_ERROR(send(d->s, msg, strlen(msg), 0))) {
free(data);
kdc_log(context, config, 0, "HTTP write failed: %s: %s",
d->addr_string, strerror(SOCK_ERRNO));
d->addr_string, strerror(rk_SOCK_ERRNO));
return -1;
}
}
@@ -780,8 +781,8 @@ handle_tcp(krb5_context context,
}
n = recvfrom(d[idx].s, buf, sizeof(buf), 0, NULL, NULL);
if(IS_SOCKET_ERROR(n)){
krb5_warn(context, SOCK_ERRNO, "recvfrom failed from %s to %s/%d",
if(rk_IS_SOCKET_ERROR(n)){
krb5_warn(context, rk_SOCK_ERRNO, "recvfrom failed from %s to %s/%d",
d[idx].addr_string, descr_type(d + idx),
ntohs(d[idx].port));
return;
@@ -867,7 +868,7 @@ loop(krb5_context context,
FD_ZERO(&fds);
for(i = 0; i < ndescr; i++) {
if(!IS_BAD_SOCKET(d[i].s)){
if(!rk_IS_BAD_SOCKET(d[i].s)){
if(d[i].type == SOCK_STREAM &&
d[i].timeout && d[i].timeout < time(NULL)) {
kdc_log(context, config, 1,
@@ -909,11 +910,11 @@ loop(krb5_context context,
break;
case -1:
if (errno != EINTR)
krb5_warn(context, SOCK_ERRNO, "select");
krb5_warn(context, rk_SOCK_ERRNO, "select");
break;
default:
for(i = 0; i < ndescr; i++)
if(!IS_BAD_SOCKET(d[i].s) && FD_ISSET(d[i].s, &fds)) {
if(!rk_IS_BAD_SOCKET(d[i].s) && FD_ISSET(d[i].s, &fds)) {
if(d[i].type == SOCK_DGRAM)
handle_udp(context, config, &d[i]);
else if(d[i].type == SOCK_STREAM)

View File

@@ -78,7 +78,7 @@ main(int argc, char **argv)
krb5_principal c1, c2;
krb5_authenticator authent;
krb5_keytab keytab;
SOCKET sock = INVALID_SOCKET;
krb5_socket_t sock = rk_INVALID_SOCKET;
int close_socket = 0;
HDB *db = NULL;
int optidx = 0;

View File

@@ -45,13 +45,13 @@ static int time_before_gone;
const char *master_hostname;
static SOCKET
static krb5_socket_t
make_signal_socket (krb5_context context)
{
#ifndef NO_UNIX_SOCKETS
struct sockaddr_un addr;
const char *fn;
SOCKET fd;
krb5_socket_t fd;
fn = kadm5_log_signal_socket(context);
@@ -67,30 +67,30 @@ make_signal_socket (krb5_context context)
return fd;
#else
struct addrinfo *ai = NULL;
SOCKET fd;
krb5_socket_t fd;
kadm5_log_signal_socket_info(context, 1, &ai);
fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
if (IS_BAD_SOCKET(fd))
krb5_err (context, 1, SOCK_ERRNO, "socket AF=%d", ai->ai_family);
if (rk_IS_BAD_SOCKET(fd))
krb5_err (context, 1, rk_SOCK_ERRNO, "socket AF=%d", ai->ai_family);
if (IS_SOCKET_ERROR( bind (fd, ai->ai_addr, ai->ai_addrlen) ))
krb5_err (context, 1, SOCK_ERRNO, "bind");
if (rk_IS_SOCKET_ERROR( bind (fd, ai->ai_addr, ai->ai_addrlen) ))
krb5_err (context, 1, rk_SOCK_ERRNO, "bind");
return fd;
#endif
}
static SOCKET
static krb5_socket_t
make_listen_socket (krb5_context context, const char *port_str)
{
SOCKET fd;
krb5_socket_t fd;
int one = 1;
struct sockaddr_in addr;
fd = socket (AF_INET, SOCK_STREAM, 0);
if (IS_BAD_SOCKET(fd))
krb5_err (context, 1, SOCK_ERRNO, "socket AF_INET");
if (rk_IS_BAD_SOCKET(fd))
krb5_err (context, 1, rk_SOCK_ERRNO, "socket AF_INET");
setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, (void *)&one, sizeof(one));
memset (&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
@@ -120,7 +120,7 @@ make_listen_socket (krb5_context context, const char *port_str)
}
struct slave {
SOCKET fd;
krb5_socket_t fd;
struct sockaddr_in addr;
char *name;
krb5_auth_context ac;
@@ -195,9 +195,9 @@ slave_dead(krb5_context context, slave *s)
{
krb5_warnx(context, "slave %s dead", s->name);
if (!IS_BAD_SOCKET(s->fd)) {
if (!rk_IS_BAD_SOCKET(s->fd)) {
closesocket (s->fd);
s->fd = INVALID_SOCKET;
s->fd = rk_INVALID_SOCKET;
}
s->flags |= SLAVE_F_DEAD;
slave_seen(s);
@@ -208,7 +208,7 @@ remove_slave (krb5_context context, slave *s, slave **root)
{
slave **p;
if (!IS_BAD_SOCKET(s->fd))
if (!rk_IS_BAD_SOCKET(s->fd))
closesocket (s->fd);
if (s->name)
free (s->name);
@@ -224,7 +224,8 @@ remove_slave (krb5_context context, slave *s, slave **root)
}
static void
add_slave (krb5_context context, krb5_keytab keytab, slave **root, SOCKET fd)
add_slave (krb5_context context, krb5_keytab keytab, slave **root,
krb5_socket_t fd)
{
krb5_principal server;
krb5_error_code ret;
@@ -243,8 +244,8 @@ add_slave (krb5_context context, krb5_keytab keytab, slave **root, SOCKET fd)
addr_len = sizeof(s->addr);
s->fd = accept (fd, (struct sockaddr *)&s->addr, &addr_len);
if (IS_BAD_SOCKET(s->fd)) {
krb5_warn (context, errno, "accept");
if (rk_IS_BAD_SOCKET(s->fd)) {
krb5_warn (context, rk_SOCK_ERRNO, "accept");
goto error;
}
if (master_hostname)
@@ -309,7 +310,7 @@ error:
struct prop_context {
krb5_auth_context auth_context;
SOCKET fd;
krb5_socket_t fd;
};
static int
@@ -759,7 +760,7 @@ main(int argc, char **argv)
void *kadm_handle;
kadm5_server_context *server_context;
kadm5_config_params conf;
SOCKET signal_fd, listen_fd;
krb5_socket_t signal_fd, listen_fd;
int log_fd;
slave *slaves = NULL;
uint32_t current_version = 0, old_version = 0;

View File

@@ -79,7 +79,7 @@ typedef struct kadm5_log_context {
#else
struct addrinfo *socket_info;
#endif
SOCKET socket_fd;
krb5_socket_t socket_fd;
} kadm5_log_context;
typedef struct kadm5_server_context {

View File

@@ -170,9 +170,9 @@ krb5_auth_con_genaddrs(krb5_context context,
if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR) {
if (auth_context->local_address == NULL) {
len = sizeof(ss_local);
if(IS_SOCKET_ERROR(getsockname(fd, local, &len))) {
if(rk_IS_SOCKET_ERROR(getsockname(fd, local, &len))) {
char buf[128];
ret = SOCK_ERRNO;
ret = rk_SOCK_ERRNO;
strerror_r(ret, buf, sizeof(buf));
krb5_set_error_message(context, ret, "getsockname: %s", buf);
goto out;
@@ -188,9 +188,9 @@ krb5_auth_con_genaddrs(krb5_context context,
}
if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR) {
len = sizeof(ss_remote);
if(IS_SOCKET_ERROR(getpeername(fd, remote, &len))) {
if(rk_IS_SOCKET_ERROR(getpeername(fd, remote, &len))) {
char buf[128];
ret = SOCK_ERRNO;
ret = rk_SOCK_ERRNO;
strerror_r(ret, buf, sizeof(buf));
krb5_set_error_message(context, ret, "getpeername: %s", buf);
goto out;

View File

@@ -363,10 +363,8 @@ krb5_init_context(krb5_context *context)
if (ret)
goto out;
#endif
#ifdef NEED_SOCK_INIT
if (SOCK_INIT)
if (SOCK_INIT())
p->flags |= KRB5_CTX_F_SOCKETS_INITIALIZED;
#endif
out:
if(ret) {
@@ -535,11 +533,9 @@ krb5_free_context(krb5_context context)
HEIMDAL_MUTEX_destroy(context->mutex);
free(context->mutex);
#ifdef NEED_SOCK_INIT
if (context->flags & KRB5_CTX_F_SOCKETS_INITIALIZED) {
SOCK_EXIT;
SOCK_EXIT();
}
#endif
memset(context, 0, sizeof(*context));
free(context);

View File

@@ -40,20 +40,5 @@ krb5_net_read (krb5_context context,
size_t len)
{
krb5_socket_t fd = *((krb5_socket_t *)p_fd);
#ifdef SOCKET_IS_NOT_AN_FD
#ifdef _MSC_VER
{
HANDLE h = _get_osfhandle(fd);
if (h != INVALID_HANDLE_VALUE) {
return net_read (fd, buf, len);
}
}
#else
#error Dont know how to handle socket that may be an fd
#endif
#endif
return net_read_s (fd, buf, len);
return net_read(fd, buf, len);
}

View File

@@ -40,24 +40,10 @@ krb5_net_write (krb5_context context,
size_t len)
{
krb5_socket_t fd = *((krb5_socket_t *)p_fd);
#ifdef SOCKET_IS_NOT_AN_FD
#ifdef _MSC_VER
{
HANDLE h = _get_osfhandle(fd);
if (h != INVALID_HANDLE_VALUE) {
return net_write (fd, buf, len);
}
}
#else
#error Dont know how to handle SOCKET that may be an fd
#endif
#endif
return net_write_s (fd, buf, len);
return net_write(fd, buf, len);
}
KRB5_DEPRECATED
KRB5_LIB_FUNCTION krb5_ssize_t KRB5_LIB_CALL
krb5_net_write_block(krb5_context context,
void *p_fd,
@@ -85,8 +71,8 @@ krb5_net_write_block(krb5_context context,
tvp = NULL;
ret = select(fd + 1, NULL, &wfds, NULL, tvp);
if (IS_SOCKET_ERROR(ret)) {
if (SOCK_ERRNO == EINTR)
if (rk_IS_SOCKET_ERROR(ret)) {
if (rk_SOCK_ERRNO == EINTR)
continue;
return -1;
}
@@ -99,7 +85,7 @@ krb5_net_write_block(krb5_context context,
count = send (fd, cbuf, rem, 0);
if (IS_SOCKET_ERROR(count)) {
if (rk_IS_SOCKET_ERROR(count)) {
return -1;
}

View File

@@ -266,7 +266,7 @@ send_via_proxy (krb5_context context,
struct addrinfo hints;
struct addrinfo *ai, *a;
int ret;
krb5_socket_t s = INVALID_SOCKET;
krb5_socket_t s = rk_INVALID_SOCKET;
char portstr[NI_MAXSERV];
if (proxy == NULL)
@@ -416,7 +416,7 @@ krb5_sendto (krb5_context context,
for (a = ai; a != NULL; a = a->ai_next) {
fd = socket (a->ai_family, a->ai_socktype | SOCK_CLOEXEC, a->ai_protocol);
if (IS_BAD_SOCKET(fd))
if (rk_IS_BAD_SOCKET(fd))
continue;
rk_cloexec(fd);
if (connect (fd, a->ai_addr, a->ai_addrlen) < 0) {

View File

@@ -91,7 +91,7 @@ krb5_storage_from_fd(krb5_socket_t fd_in)
krb5_storage *sp;
int fd;
#ifdef SOCKET_IS_NOT_AN_FD
#ifdef _WIN32
#ifdef _MSC_VER
if (_get_osfhandle(fd_in) != -1) {
fd = dup(fd_in);
@@ -101,7 +101,7 @@ krb5_storage_from_fd(krb5_socket_t fd_in)
#else
#error Dont know how to deal with fd that may or may not be a socket.
#endif
#else /* SOCKET_IS_NOT_AN_FD */
#else
fd = dup(fd_in);
#endif

View File

@@ -79,7 +79,7 @@ libroken_la_OBJS = \
$(OBJ)\resolve.obj \
$(OBJ)\roken_gethostby.obj \
$(OBJ)\rtbl.obj \
$(OBJ)\sendmsg_w32.obj \
$(OBJ)\sendmsg.obj \
$(OBJ)\setenv.obj \
$(OBJ)\setprogname.obj \
$(OBJ)\simple_exec_w32.obj \

View File

@@ -80,7 +80,7 @@ main(int argc, char **argv)
int ret;
if (SOCK_INIT)
errx(1, "Couldn't initialize sockets. Err=%d\n", SOCK_ERRNO);
errx(1, "Couldn't initialize sockets. Err=%d\n", rk_SOCK_ERRNO);
ret = getifaddrs(&addrs);
if (ret != 0)
@@ -95,7 +95,7 @@ main(int argc, char **argv)
freeifaddrs(addrs);
if (SOCK_EXIT)
errx(1, "Couldn't uninitialize sockets. Err=%d\n", SOCK_ERRNO);
errx(1, "Couldn't uninitialize sockets. Err=%d\n", rk_SOCK_ERRNO);
return 0;
}

View File

@@ -41,12 +41,12 @@
*/
static void
accept_it (SOCKET s, SOCKET *ret_socket)
accept_it (rk_socket_t s, rk_socket_t *ret_socket)
{
SOCKET as;
rk_socket_t as;
as = accept(s, NULL, NULL);
if(IS_BAD_SOCKET(as))
if(rk_IS_BAD_SOCKET(as))
err (1, "accept");
if (ret_socket) {
@@ -54,20 +54,16 @@ accept_it (SOCKET s, SOCKET *ret_socket)
*ret_socket = as;
} else {
int fd = fd_from_socket(as, 0);
int fd = socket_to_fd(as, 0);
/* We would use _O_RDONLY for the fd_from_socket() call for
/* We would use _O_RDONLY for the socket_to_fd() call for
STDIN, but there are instances where we assume that STDIN
is a r/w socket. */
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
#ifdef SOCKET_IS_NOT_AN_FD
close(fd);
#else
closesocket(as);
#endif
closesocket(fd);
}
}
@@ -90,14 +86,14 @@ accept_it (SOCKET s, SOCKET *ret_socket)
* @see mini_inetd()
*/
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
mini_inetd_addrinfo (struct addrinfo *ai, SOCKET *ret_socket)
mini_inetd_addrinfo (struct addrinfo *ai, rk_socket_t *ret_socket)
{
int ret;
struct addrinfo *a;
int n, nalloc, i;
SOCKET *fds;
rk_socket_t *fds;
fd_set orig_read_set, read_set;
SOCKET max_fd = (SOCKET)-1;
rk_socket_t max_fd = (rk_socket_t)-1;
for (nalloc = 0, a = ai; a != NULL; a = a->ai_next)
++nalloc;
@@ -112,20 +108,20 @@ mini_inetd_addrinfo (struct addrinfo *ai, SOCKET *ret_socket)
for (i = 0, a = ai; a != NULL; a = a->ai_next) {
fds[i] = socket (a->ai_family, a->ai_socktype, a->ai_protocol);
if (IS_BAD_SOCKET(fds[i]))
if (rk_IS_BAD_SOCKET(fds[i]))
continue;
socket_set_reuseaddr (fds[i], 1);
socket_set_ipv6only(fds[i], 1);
if (IS_SOCKET_ERROR(bind (fds[i], a->ai_addr, a->ai_addrlen))) {
if (rk_IS_SOCKET_ERROR(bind (fds[i], a->ai_addr, a->ai_addrlen))) {
warn ("bind af = %d", a->ai_family);
closesocket(fds[i]);
fds[i] = INVALID_SOCKET;
fds[i] = rk_INVALID_SOCKET;
continue;
}
if (IS_SOCKET_ERROR(listen (fds[i], SOMAXCONN))) {
if (rk_IS_SOCKET_ERROR(listen (fds[i], SOMAXCONN))) {
warn ("listen af = %d", a->ai_family);
closesocket(fds[i]);
fds[i] = INVALID_SOCKET;
fds[i] = rk_INVALID_SOCKET;
continue;
}
#ifndef NO_LIMIT_FD_SETSIZE
@@ -144,7 +140,7 @@ mini_inetd_addrinfo (struct addrinfo *ai, SOCKET *ret_socket)
read_set = orig_read_set;
ret = select (max_fd + 1, &read_set, NULL, NULL, NULL);
if (IS_SOCKET_ERROR(ret) && SOCK_ERRNO != EINTR)
if (rk_IS_SOCKET_ERROR(ret) && rk_SOCK_ERRNO != EINTR)
err (1, "select");
} while (ret <= 0);
@@ -177,7 +173,7 @@ mini_inetd_addrinfo (struct addrinfo *ai, SOCKET *ret_socket)
* @see mini_inetd_addrinfo()
*/
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
mini_inetd (int port, SOCKET * ret_socket)
mini_inetd (int port, rk_socket_t * ret_socket)
{
int error;
struct addrinfo *ai, hints;

View File

@@ -39,8 +39,10 @@
* Like read but never return partial data.
*/
#ifndef _WIN32
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
net_read (int fd, void *buf, size_t nbytes)
net_read (rk_socket_t fd, void *buf, size_t nbytes)
{
char *cbuf = (char *)buf;
ssize_t count;
@@ -62,10 +64,10 @@ net_read (int fd, void *buf, size_t nbytes)
return nbytes;
}
#ifdef SOCKET_IS_NOT_AN_FD
#else
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
net_read_s (SOCKET sock, void *buf, size_t nbytes)
net_read(rk_socket_t sock, void *buf, size_t nbytes)
{
char *cbuf = (char *)buf;
ssize_t count;
@@ -80,7 +82,7 @@ net_read_s (SOCKET sock, void *buf, size_t nbytes)
WSACancelBlockingCall(). */
#ifndef HAVE_WINSOCK
if (SOCK_ERRNO == EINTR)
if (rk_SOCK_ERRNO == EINTR)
continue;
#endif
return count;

View File

@@ -39,8 +39,10 @@
* Like write but never return partial data.
*/
#ifndef _WIN32
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
net_write (int fd, const void *buf, size_t nbytes)
net_write (rk_socket_t fd, const void *buf, size_t nbytes)
{
const char *cbuf = (const char *)buf;
ssize_t count;
@@ -60,10 +62,10 @@ net_write (int fd, const void *buf, size_t nbytes)
return nbytes;
}
#ifdef SOCKET_IS_NOT_AN_FD
#else
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
net_write_s (SOCKET sock, const void *buf, size_t nbytes)
net_write(rk_socket_t sock, const void *buf, size_t nbytes)
{
const char *cbuf = (const char *)buf;
ssize_t count;

View File

@@ -392,30 +392,27 @@ socket_set_port (struct sockaddr *, int);
#define socket_set_portrange rk_socket_set_portrange
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
socket_set_portrange (SOCKET, int, int);
socket_set_portrange (rk_socket_t, int, int);
#define socket_set_debug rk_socket_set_debug
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
socket_set_debug (SOCKET);
socket_set_debug (rk_socket_t);
#define socket_set_tos rk_socket_set_tos
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
socket_set_tos (SOCKET, int);
socket_set_tos (rk_socket_t, int);
#define socket_set_reuseaddr rk_socket_set_reuseaddr
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
socket_set_reuseaddr (SOCKET, int);
socket_set_reuseaddr (rk_socket_t, int);
#define socket_set_ipv6only rk_socket_set_ipv6only
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
socket_set_ipv6only (SOCKET, int);
socket_set_ipv6only (rk_socket_t, int);
#ifdef SOCKET_IS_NOT_AN_FD
#define socket_to_fd rk_socket_to_fd
ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
fd_from_socket(SOCKET, int);
#else
#define fd_from_socket(s,f) (s)
#endif
socket_to_fd(rk_socket_t, int);
#define vstrcollect rk_vstrcollect
ROKEN_LIB_FUNCTION char ** ROKEN_LIB_CALL

View File

@@ -56,36 +56,36 @@
#include<ws2tcpip.h>
#define IS_BAD_SOCKET(s) ((s) == INVALID_SOCKET)
#define IS_SOCKET_ERROR(rv) ((rv) == SOCKET_ERROR)
#define SOCK_ERRNO WSAGetLastError()
#define SOCK_IOCTL(s,c,a) ioctlsocket((s),(c),(a))
typedef SOCKET rk_socket_t;
#define rk_IS_BAD_SOCKET(s) ((s) == INVALID_SOCKET)
#define rk_IS_SOCKET_ERROR(rv) ((rv) == SOCKET_ERROR)
#define rk_SOCK_ERRNO WSAGetLastError()
#define rk_SOCK_IOCTL(s,c,a) ioctlsocket((s),(c),(a))
#define ETIMEDOUT WSAETIMEDOUT
#define EWOULDBLOCK WSAEWOULDBLOCK
#define ENOTSOCK WSAENOTSOCK
#define SOCK_INIT rk_WSAStartup()
#define SOCK_EXIT rk_WSACleanup()
#define NEED_SOCK_INIT 1
#define rk_SOCK_INIT rk_WSAStartup()
#define rk_SOCK_EXIT rk_WSACleanup()
ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_WSAStartup(void);
ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_WSACleanup(void);
#else /* not WinSock */
typedef int SOCKET;
typedef int rk_socket_t;
#define closesocket(x) close(x)
#define SOCK_IOCTL(s,c,a) ioctl((s),(c),(a))
#define IS_BAD_SOCKET(s) ((s) < 0)
#define IS_SOCKET_ERROR(rv) ((rv) < 0)
#define SOCK_ERRNO errno
#define INVALID_SOCKET (-1)
#define rk_closesocket(x) close(x)
#define rk_SOCK_IOCTL(s,c,a) ioctl((s),(c),(a))
#define rk_IS_BAD_SOCKET(s) ((s) < 0)
#define rk_IS_SOCKET_ERROR(rv) ((rv) < 0)
#define rk_SOCK_ERRNO errno
#define rk_INVALID_SOCKET (-1)
#define SOCK_INIT (0)
#define SOCK_EXIT (0)
#undef NEED_SOCK_INIT
#define rk_SOCK_INIT 0
#define rk_SOCK_EXIT 0
#endif
@@ -654,24 +654,14 @@ ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL roken_vconcat (char *, size_t, va_list);
ROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL
roken_vmconcat (char **, size_t, va_list);
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL net_write (int, const void *, size_t);
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
net_write (rk_socket_t, const void *, size_t);
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL net_read (int, void *, size_t);
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
net_read (rk_socket_t, void *, size_t);
#ifdef SOCKET_IS_NOT_AN_FD
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL net_write_s (SOCKET, const void *, size_t);
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL net_read_s (SOCKET, void *, size_t);
#else
#define net_read_s net_read
#define net_write_s net_write
#endif
ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL issuid(void);
ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
issuid(void);
#ifndef HAVE_STRUCT_WINSIZE
struct winsize {
@@ -833,9 +823,7 @@ struct msghdr {
};
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
sendmsg_w32(SOCKET s, const struct msghdr * msg, int flags);
#define sendmsg(s,m,f) sendmsg_w32((s),(m),(f))
sendmsg(rk_socket_t s, const struct msghdr * msg, int flags);
#endif
@@ -935,10 +923,10 @@ extern const char *__progname;
#endif
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
mini_inetd_addrinfo (struct addrinfo*, SOCKET *);
mini_inetd_addrinfo (struct addrinfo*, rk_socket *);
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
mini_inetd (int, SOCKET *);
mini_inetd (int, rk_socket_t *);
#ifndef HAVE_LOCALTIME_R
#define localtime_r rk_localtime_r

View File

@@ -35,8 +35,10 @@
#include "roken.h"
#ifndef _WIN32
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
sendmsg(SOCKET s, const struct msghdr *msg, int flags)
sendmsg(rk_socket_t s, const struct msghdr *msg, int flags)
{
ssize_t ret;
size_t tot = 0;
@@ -60,3 +62,87 @@ sendmsg(SOCKET s, const struct msghdr *msg, int flags)
free (buf);
return ret;
}
#else /* _WIN32 */
/***********************************************************************
* Copyright (c) 2009, Secure Endpoints Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* - Neither the name of Secure Endpoints Inc. nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
**********************************************************************/
/*
* Implementation of sendmsg() for WIN32
*
* We are using a contrived definition of msghdr which actually uses
* an array of ::_WSABUF structures instead of ::iovec . This allows
* us to call WSASend directly using the given ::msghdr instead of
* having to allocate another array of ::_WSABUF and copying data for
* each call.
*
* Limitations:
*
* - msg->msg_name is ignored. So is msg->control.
* - WSASend() only supports ::MSG_DONTROUTE, ::MSG_OOB and
* ::MSG_PARTIAL.
*
* @param[in] s The socket to use.
* @param[in] msg The message
* @param[in] flags Flags. A combination of ::MSG_DONTROUTE,
* ::MSG_OOB and ::MSG_PARTIAL
*
* @return The number of bytes sent, on success. Or -1 on error.
*/
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
sendmsg_w32(rk_socket_t s, const struct msghdr * msg, int flags)
{
int srv;
DWORD num_bytes_sent = 0;
/* TODO: For _WIN32_WINNT >= 0x0600 we can use WSASendMsg using
WSAMSG which is a much more direct analogue to sendmsg(). */
srv = WSASend(s, msg->msg_iov, msg->msg_iovlen,
&num_bytes_sent, flags, NULL, NULL);
if (srv == 0)
return (int) num_bytes_sent;
/* srv == SOCKET_ERROR and WSAGetLastError() == WSA_IO_PENDING
indicates that a non-blocking transfer has been scheduled.
We'll have to check for that if we ever support non-blocking
I/O. */
return -1;
}
#endif /* !_WIN32 */

View File

@@ -1,86 +0,0 @@
/***********************************************************************
* Copyright (c) 2009, Secure Endpoints Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* - Neither the name of Secure Endpoints Inc. nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
**********************************************************************/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <roken.h>
/**
* Implementation of sendmsg() for WIN32
*
* We are using a contrived definition of msghdr which actually uses
* an array of ::_WSABUF structures instead of ::iovec . This allows
* us to call WSASend directly using the given ::msghdr instead of
* having to allocate another array of ::_WSABUF and copying data for
* each call.
*
* Limitations:
*
* - msg->msg_name is ignored. So is msg->control.
* - WSASend() only supports ::MSG_DONTROUTE, ::MSG_OOB and
* ::MSG_PARTIAL.
*
* @param[in] s The socket to use.
* @param[in] msg The message
* @param[in] flags Flags. A combination of ::MSG_DONTROUTE,
* ::MSG_OOB and ::MSG_PARTIAL
*
* @return The number of bytes sent, on success. Or -1 on error.
*/
ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
sendmsg_w32(SOCKET s, const struct msghdr * msg, int flags)
{
int srv;
DWORD num_bytes_sent = 0;
/* TODO: For _WIN32_WINNT >= 0x0600 we can use WSASendMsg using
WSAMSG which is a much more direct analogue to sendmsg(). */
srv = WSASend(s, msg->msg_iov, msg->msg_iovlen,
&num_bytes_sent, flags, NULL, NULL);
if (srv == 0)
return (int) num_bytes_sent;
/* srv == SOCKET_ERROR and WSAGetLastError() == WSA_IO_PENDING
indicates that a non-blocking transfer has been scheduled.
We'll have to check for that if we ever support non-blocking
I/O. */
return -1;
}

View File

@@ -222,7 +222,7 @@ socket_set_port (struct sockaddr *sa, int port)
* Set the range of ports to use when binding with port = 0.
*/
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
socket_set_portrange (SOCKET sock, int restr, int af)
socket_set_portrange (rk_socket_t sock, int restr, int af)
{
#if defined(IP_PORTRANGE)
if (af == AF_INET) {
@@ -248,12 +248,12 @@ socket_set_portrange (SOCKET sock, int restr, int af)
*/
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
socket_set_debug (SOCKET sock)
socket_set_debug (rk_socket_t sock)
{
#if defined(SO_DEBUG) && defined(HAVE_SETSOCKOPT)
int on = 1;
if (setsockopt (sock, SOL_SOCKET, SO_DEBUG, (void *) &on, sizeof (on)) < 0)
if (setsockopt (sock, SOL_rk_socket_t, SO_DEBUG, (void *) &on, sizeof (on)) < 0)
warn ("setsockopt SO_DEBUG (ignored)");
#endif
}
@@ -263,7 +263,7 @@ socket_set_debug (SOCKET sock)
*/
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
socket_set_tos (SOCKET sock, int tos)
socket_set_tos (rk_socket_t sock, int tos)
{
#if defined(IP_TOS) && defined(HAVE_SETSOCKOPT)
if (setsockopt (sock, IPPROTO_IP, IP_TOS, (void *) &tos, sizeof (int)) < 0)
@@ -277,10 +277,10 @@ socket_set_tos (SOCKET sock, int tos)
*/
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
socket_set_reuseaddr (SOCKET sock, int val)
socket_set_reuseaddr (rk_socket_t sock, int val)
{
#if defined(SO_REUSEADDR) && defined(HAVE_SETSOCKOPT)
if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&val,
if(setsockopt(sock, SOL_rk_socket_t, SO_REUSEADDR, (void *)&val,
sizeof(val)) < 0)
err (1, "setsockopt SO_REUSEADDR");
#endif
@@ -291,28 +291,27 @@ socket_set_reuseaddr (SOCKET sock, int val)
*/
ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
socket_set_ipv6only (SOCKET sock, int val)
socket_set_ipv6only (rk_socket_t sock, int val)
{
#if defined(IPV6_V6ONLY) && defined(HAVE_SETSOCKOPT)
setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&val, sizeof(val));
#endif
}
#ifdef SOCKET_IS_NOT_AN_FD
/**
* Create a file descriptor from a socket
*
* While the socket handle in \a sock can be used with WinSock
* functions after calling fd_from_socket(), it should not be closed
* functions after calling socket_to_fd(), it should not be closed
* with closesocket(). The socket will be closed when the associated
* file descriptor is closed.
*/
ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
fd_from_socket(SOCKET sock, int flags)
socket_to_fd(rk_socket_t sock, int flags)
{
#ifndef _WIN32
return sock;
#else
return _open_osfhandle((intptr_t) sock, flags);
}
#endif
}

View File

@@ -55,31 +55,30 @@ get_address(int flags, struct addrinfo ** ret)
ai.ai_protocol = PF_UNSPEC;
rv = getaddrinfo("127.0.0.1", PORT_S, &ai, ret);
if (rv) {
fprintf(stderr, "[%s] getaddrinfo: %s", prog, gai_strerror(rv));
}
if (rv)
warnx("getaddrinfo: %s", gai_strerror(rv));
return rv;
}
static int
get_connected_socket(SOCKET * s_ret)
get_connected_socket(rk_socket_t * s_ret)
{
struct addrinfo * ai = NULL;
int rv = 0;
SOCKET s = INVALID_SOCKET;
rk_socket_t s = rk_INVALID_SOCKET;
rv = get_address(0, &ai);
if (rv)
return rv;
s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
if (IS_BAD_SOCKET(s)) {
if (rk_IS_BAD_SOCKET(s)) {
rv = 1;
goto done;
}
rv = connect(s, ai->ai_addr, ai->ai_addrlen);
if (IS_SOCKET_ERROR(rv))
if (rk_IS_SOCKET_ERROR(rv))
goto done;
*s_ret = s;
@@ -87,13 +86,13 @@ get_connected_socket(SOCKET * s_ret)
rv = 0;
done:
if (!IS_BAD_SOCKET(s))
if (!rk_IS_BAD_SOCKET(s))
closesocket(s);
if (ai)
freeaddrinfo(ai);
return (rv)?SOCK_ERRNO: 0;
return (rv) ? rk_SOCK_ERRNO : 0;
}
const char * test_strings[] = {
@@ -106,31 +105,34 @@ const char * test_strings[] = {
static int
test_simple_echo_client(void)
{
SOCKET s = INVALID_SOCKET;
rk_socket_t s = INVALID_SOCKET;
int rv;
char buf[81];
int i;
fprintf (stderr, "[%s] Getting connected socket...", prog);
fprintf(stderr, "[%s] Getting connected socket...", getprogname());
rv = get_connected_socket(&s);
if (rv) {
fprintf(stderr, "\n[%s] get_connected_socket() failed (%s)\n", prog, strerror(SOCK_ERRNO));
fprintf(stderr, "\n[%s] get_connected_socket() failed (%s)\n",
getprogname(), strerror(rk_SOCK_ERRNO));
return 1;
}
fprintf (stderr, "[%s] done\n", prog);
fprintf(stderr, "[%s] done\n", getprogname());
for (i=0; i < sizeof(test_strings)/sizeof(test_strings[0]); i++) {
rv = send(s, test_strings[i], strlen(test_strings[i]), 0);
if (IS_SOCKET_ERROR(rv)) {
fprintf (stderr, "[%s] send() failure (%s)\n", prog, strerror(SOCK_ERRNO));
if (rk_IS_SOCKET_ERROR(rv)) {
fprintf(stderr, "[%s] send() failure (%s)\n",
getprogname(), strerror(rk_SOCK_ERRNO));
closesocket(s);
return 1;
}
rv = recv(s, buf, sizeof(buf), 0);
if (IS_SOCKET_ERROR(rv)) {
fprintf (stderr, "[%s] recv() failure (%s)\n", prog, strerror(SOCK_ERRNO));
if (rk_IS_SOCKET_ERROR(rv)) {
fprintf (stderr, "[%s] recv() failure (%s)\n",
getprogname(), strerror(rk_SOCK_ERRNO));
closesocket(s);
return 1;
}
@@ -163,12 +165,13 @@ test_simple_echo_socket(void)
return test_simple_echo_client();
} else {
SOCKET s = INVALID_SOCKET;
rk_socket_t s = INVALID_SOCKET;
fprintf (stderr, "[%s] Listening for connections...\n", prog);
mini_inetd(htons(PORT), &s);
if (IS_BAD_SOCKET(s)) {
fprintf (stderr, "[%s] Connect failed (%s)\n", prog, strerror(SOCK_ERRNO));
if (rk_IS_BAD_SOCKET(s)) {
fprintf (stderr, "[%s] Connect failed (%s)\n",
getprogname(), strerror(rk_SOCK_ERRNO));
} else {
fprintf (stderr, "[%s] Connected\n", prog);
}
@@ -177,17 +180,19 @@ test_simple_echo_socket(void)
char buf[81];
int rv, srv;
while ((rv = recv(s, buf, sizeof(buf), 0)) != 0 && !IS_SOCKET_ERROR(rv)) {
while ((rv = recv(s, buf, sizeof(buf), 0)) != 0 && !rk_IS_SOCKET_ERROR(rv)) {
buf[rv] = 0;
fprintf(stderr, "[%s] Received [%s]\n", prog, buf);
/* simple echo */
srv = send(s, buf, rv, 0);
if (srv != rv) {
if (IS_SOCKET_ERROR(srv))
fprintf(stderr, "[%s] send() error [%s]\n", prog, strerror(SOCK_ERRNO));
if (rk_IS_SOCKET_ERROR(srv))
fprintf(stderr, "[%s] send() error [%s]\n",
getprogname(), strerror(rk_SOCK_ERRNO));
else
fprintf(stderr, "[%s] send() size mismatch %d != %d", prog, srv, rv);
fprintf(stderr, "[%s] send() size mismatch %d != %d",
getprogname(), srv, rv);
}
if (!strcmp(buf, "exit")) {
@@ -198,7 +203,9 @@ test_simple_echo_socket(void)
}
}
fprintf(stderr, "[%s] recv() failed (%s)\n", prog, strerror(SOCK_ERRNO));
fprintf(stderr, "[%s] recv() failed (%s)\n",
getprogname(),
strerror(rk_SOCK_ERRNO));
}
closesocket(s);
@@ -346,6 +353,8 @@ do_test(char * path)
int main(int argc, char ** argv)
{
setprogname(argv[0]);
if (argc == 2 && strcmp(argv[1], "--client") == 0)
return do_client();
else if (argc == 2 && strcmp(argv[1], "--server") == 0)