Page MenuHomeClusterLabs Projects

No OneTemporary

diff --git a/ring.c b/ring.c
index 476468f3..aaee2afb 100644
--- a/ring.c
+++ b/ring.c
@@ -1,98 +1,98 @@
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <unistd.h>
#include "ring.h"
#include "utils.h"
-int knet_ring_listen(in_port_t port)
+int knet_ring_listen(const in_port_t port)
{
int err, sock, value;
struct sockaddr_in6 addr;
sock = socket(AF_INET6, SOCK_DGRAM, 0);
if (sock < 0) {
- log_error("unable to open netsocket error");
+ log_error("Unable to open netsocket error");
return sock;
}
value = KNET_RING_RCVBUFF;
err = setsockopt(sock,
SOL_SOCKET, SO_RCVBUFFORCE, &value, sizeof(value));
if (err != 0) {
- log_error("unable to set receive buffer");
+ log_error("Unable to set receive buffer");
}
value = fcntl(sock, F_GETFD, 0);
if (value < 0) {
- log_error("unable to get close-on-exec flag");
+ log_error("Unable to get close-on-exec flag");
goto clean_fail;
}
value |= FD_CLOEXEC;
err = fcntl(sock, F_SETFD, value);
if (err < 0) {
- log_error("unable to set close-on-exec flag");
+ log_error("Unable to set close-on-exec flag");
goto clean_fail;
}
memset(&addr, 0, sizeof(addr));
addr.sin6_family = AF_INET6;
addr.sin6_port = ntohs(port);
memcpy(&addr.sin6_addr, &in6addr_any, sizeof(struct in6_addr));
err = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
if (err < 0) {
- log_error("unable to bind to netsocket");
+ log_error("Unable to bind to netsocket");
goto clean_fail;
}
return sock;
clean_fail:
close(sock);
return -1;
}
int knet_ring_connect(struct knet_ring *ring)
{
ring->sock = socket(ring->info.sa_family, SOCK_DGRAM, 0);
if (ring->sock < 0) {
- log_error("unable create ring socket");
+ log_error("Unable create ring socket");
return ring->sock;
}
if (connect(ring->sock, (struct sockaddr *) &ring->info,
sizeof(ring->info)) != 0) {
- log_error("unable to connect ring socket");
+ log_error("Unable to connect ring socket");
goto clean_fail;
}
return ring->sock;
clean_fail:
close(ring->sock);
ring->sock = -1;
return ring->sock;
}
void knet_ring_disconnect(struct knet_ring *ring)
{
if (ring->sock > 0) {
close(ring->sock);
+ ring->sock = -1;
}
}
-
diff --git a/ring.h b/ring.h
index 208c8fb1..00bd9a61 100644
--- a/ring.h
+++ b/ring.h
@@ -1,26 +1,26 @@
#ifndef __RING_H__
-#define __RING_H_
+#define __RING_H__
#include <netinet/in.h>
#define KNET_RING_DEFPORT 50000
#define KNET_RING_RCVBUFF 8192
struct knet_ring {
int sock;
union {
sa_family_t sa_family;
struct sockaddr_in in;
struct sockaddr_in6 in6;
} info;
struct knet_ring *next;
};
int knet_ring_listen(in_port_t port);
int knet_ring_connect(struct knet_ring *ring);
void knet_ring_disconnect(struct knet_ring *ring);
#endif
diff --git a/tests/ring_test.c b/tests/ring_test.c
index 17b3d4ed..c1eee129 100644
--- a/tests/ring_test.c
+++ b/tests/ring_test.c
@@ -1,95 +1,108 @@
#include "config.h"
#include <stdlib.h>
#include <unistd.h>
#include <alloca.h>
#include "ring.h"
#include "utils.h"
static char test_msg[] = "HelloWorld01234567890";
static int wait_data(int sock, time_t sec)
{
int err;
fd_set rfds;
struct timeval tv;
tv.tv_sec = sec;
tv.tv_usec = 0;
FD_ZERO(&rfds);
FD_SET(sock, &rfds);
err = select(sock + 1, &rfds, NULL, NULL, &tv);
if (err == -1) {
- log_error("unable to wait for data");
+ log_error("Unable to wait for data");
exit(-1);
} else if (FD_ISSET(sock, &rfds)) {
return 0;
}
return -1;
}
int main(void)
{
int sock_srv, sock_cli, err;
char recv_buf[64];
struct knet_ring *test_ring;
+ log_info("Opening ring socket");
sock_srv = knet_ring_listen(KNET_RING_DEFPORT);
if (sock_srv < 0) {
- log_error("unable to open ring socket");
+ log_error("Unable to open ring socket");
exit(-1);
}
+ log_info("Allocating new ring");
test_ring = alloca(sizeof(struct knet_ring));
+ if (test_ring == 0) {
+ log_error("Unable to allocate ring");
+ exit(-1);
+ }
+
test_ring->info.sa_family = AF_INET;
test_ring->info.in.sin_port = htons(KNET_RING_DEFPORT);
test_ring->info.in.sin_addr.s_addr = 0x0100007f; /*localhost */
+ log_info("Connecting ring socket");
sock_cli = knet_ring_connect(test_ring);
if (sock_cli < 0) {
- log_error("unable to connect ring socket");
+ log_error("Unable to connect ring socket");
exit(-1);
}
+ log_info("Writing to socket");
err = write(sock_cli, test_msg, sizeof(test_msg));
if (err != sizeof(test_msg)) {
- log_error("unable to write to ring socket");
+ log_error("Unable to write to ring socket");
exit(-1);
}
+ log_info("Waiting data from socket");
err = wait_data(sock_srv, 5); /* 5 seconds timeout */
if (err != 0) {
- log_error("unable to deliver data over ring socket");
+ log_error("Unable to deliver data over ring socket");
exit(-1);
}
+ log_info("Reading data from socket");
err = read(sock_srv, recv_buf, sizeof(recv_buf));
if (err != sizeof(test_msg)) {
- log_error("unable to read from ring socket");
+ log_error("Unable to read from ring socket");
exit(-1);
}
+ log_info("Comparing sent data and received data");
if (memcmp(test_msg, recv_buf, sizeof(test_msg)) != 0) {
errno = EINVAL;
- log_error("received message mismatch");
+ log_error("Received message mismatch");
exit(-1);
}
+ log_info("Closing sockets");
close(sock_srv);
knet_ring_disconnect(test_ring);
return 0;
}

File Metadata

Mime Type
text/x-diff
Expires
Wed, Jun 25, 5:46 AM (1 d, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1952354
Default Alt Text
(5 KB)

Event Timeline