Revision: 487
          http://vde.svn.sourceforge.net/vde/?rev=487&view=rev
Author:   rd235
Date:     2011-04-04 17:03:13 +0000 (Mon, 04 Apr 2011)

Log Message:
-----------
experimental vdeplug code P2P: connected sockets

Modified Paths:
--------------
    branches/rd235/vde-2/src/lib/libvdeplug.c

Modified: branches/rd235/vde-2/src/lib/libvdeplug.c
===================================================================
--- branches/rd235/vde-2/src/lib/libvdeplug.c   2011-04-04 09:03:07 UTC (rev 
486)
+++ branches/rd235/vde-2/src/lib/libvdeplug.c   2011-04-04 17:03:13 UTC (rev 
487)
@@ -38,6 +38,7 @@
 #include <vdecommon.h>
 
 #include <libvdeplug.h>
+#define CONNECTED_P2P
 
 /* Per-User standard switch definition */
 /* This will be prefixed by getenv("HOME") */
@@ -513,17 +514,56 @@
 
 ssize_t vde_recv(VDECONN *conn,void *buf,size_t len,int flags)
 {
+#ifdef CONNECTED_P2P
+       ssize_t retval;
+       if (__builtin_expect(conn!=0,1)) {
+               if (__builtin_expect(((retval=recv(conn->fddata,buf,len,0)) > 
0), 1))
+                       return retval;
+               else {
+                       if (retval == 0 && conn->outpath != NULL) {
+                               static struct sockaddr unspec={AF_UNSPEC};
+                               connect(conn->fddata,&unspec,sizeof(unspec));
+                       }
+                       return retval;
+               }
+       }
+       else {
+               errno=EBADF;
+               return -1;
+       }
+#else
        if (__builtin_expect(conn!=0,1))
                return recv(conn->fddata,buf,len,0);
        else {
                errno=EBADF;
                return -1;
        }
+#endif
 }
 
 ssize_t vde_send(VDECONN *conn,const void *buf,size_t len,int flags)
 {
+#ifdef CONNECTED_P2P
        if (__builtin_expect(conn!=0,1)) {
+               ssize_t retval;
+               if (__builtin_expect(((retval=send(conn->fddata,buf,len,0)) >= 
0),1))
+                       return retval;
+               else {
+                       if (__builtin_expect(errno == ENOTCONN,0)) {
+                               if (__builtin_expect(conn->outpath != NULL,1)) {
+                                       connect(conn->fddata, (struct sockaddr 
*)conn->outpath,sizeof(conn->inpath));
+                                       return send(conn->fddata,buf,len,0);
+                               } else
+                                       return retval;
+                       } else
+                               return retval;
+               }
+       } else {
+               errno=EBADF;
+               return -1;
+       }
+#else
+       if (__builtin_expect(conn!=0,1)) {
                if (__builtin_expect(conn->outpath == NULL,1))
                        return send(conn->fddata,buf,len,0);
                else 
@@ -533,6 +573,7 @@
                errno=EBADF;
                return -1;
        }
+#endif
 }
 
 int vde_datafd(VDECONN *conn)
@@ -558,6 +599,9 @@
 int vde_close(VDECONN *conn)
 {
        if (__builtin_expect(conn!=0,1)) {
+#ifdef CONNECTED_P2P
+               send(conn->fddata,NULL,0,0);
+#endif
                if (*(conn->inpath.sun_path))
                        unlink(conn->inpath.sun_path);
                if (conn->outpath != NULL)


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Create and publish websites with WebMatrix
Use the most popular FREE web apps or write code yourself; 
WebMatrix provides all the features you need to develop and 
publish your website. http://p.sf.net/sfu/ms-webmatrix-sf
_______________________________________________
vde-users mailing list
vde-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vde-users

Reply via email to