How to make cvm work on OpenBSD?

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;
   }

This entry was posted in OpenBSD and tagged , , . Bookmark the permalink.

NewPush has solutions to fit your business needs.  For more than a decade, our focus has been to take on the technical challenges that are the hardest and most time-consumming.  Our goal is to free up your resources to focus on the core activities of your business and to drive your business performance.  Please visit our main site at newpush.com for more information or call us at +1-303-423-4500.