Bruce Guenter’s cvm librairies use Linux style sockets. That is usually fine on OpenBSD, except that the cvm_udp code opens a socket, and then uses sendto() which implicitly reoppens the socket. OpenBSD doesn’t like that, so here is the patch to fix cvm-0.18:
--- client.c.org Fri Feb 20 12:07:55 2004
+++ client.c Fri Feb 20 12:09:26 2004
This patch allows cvm to run on BSD. Under Linux,
one can open a socket, and then use sendto which
technically reopens the socket. Under BSD, it isn't
allowed to use sendto() with a socket that is
already open.
@@ -269,9 +269,8 @@
if ((he = gethostbyname(hostname)) == 0) return 1;
memcpy(&ip, he->h_addr_list[0], 4);
- if ((sock = socket_udp()) == -1) return CVME_IO;
- if ( !socket_connect4(sock, &ip, port) ||
- !udp_sendrecv(sock, &ip, port)) {
+ if ((sock = socket_udp()) == -1) return CVME_IO;
+ if (!udp_sendrecv(sock, &ip, port)) {
close(sock);
return CVME_IO;
}