Page Menu
Home
ClusterLabs Projects
Search
Configure Global Search
Log In
Files
F4512548
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
Mode
rK kronosnet
Attached
Detach File
Event Timeline
Log In to Comment