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

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blogplay
  • email
  • LinkedIn
  • PDF
  • Ping.fm
  • RSS
  • Slashdot
  • Twitter
This entry was posted in OpenBSD and tagged , , . Bookmark the permalink.
blog comments powered by Disqus