From 040b8baa1e4c025e87abe342ce18ed7e07986b28 Mon Sep 17 00:00:00 2001 From: rd235 Date: Wed, 15 Jan 2014 11:12:28 +0000 Subject: [PATCH] vdetelweb: wrong char count on write+it looped if the switch terminated during svdetelweb startup git-svn-id: https://svn.code.sf.net/p/vde/svn/trunk@567 d37a7db1-d92d-0410-89df-f68f52f87b57 --- ipn/af_ipn.c | 2 ++ vdetelweb/vdetelweb.c | 2 +- vdetelweb/web.c | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ipn/af_ipn.c b/ipn/af_ipn.c index 62a0579..e15a533 100644 --- a/ipn/af_ipn.c +++ b/ipn/af_ipn.c @@ -1577,6 +1577,8 @@ int ipn_node_read(struct ipn_node *ipn_node, struct iovec *msg_iov, size_t len, spin_lock(&ipn_node->msglock); while (ipn_node->totmsgcount == 0) { spin_unlock(&ipn_node->msglock); + if (flags & MSG_DONTWAIT) + return -EWOULDBLOCK; if (wait_event_interruptible(ipn_node->read_wait, !(ipn_node->totmsgcount == 0))) return -ERESTARTSYS; diff --git a/vdetelweb/vdetelweb.c b/vdetelweb/vdetelweb.c index f7a720c..455c9dd 100644 --- a/vdetelweb/vdetelweb.c +++ b/vdetelweb/vdetelweb.c @@ -221,7 +221,7 @@ int openvdem(char *mgmt,char *progname, struct netif **nif,char *nodename) if ((ctrl=rindex(buf,'\n')) != NULL) *ctrl=0; banner=strdup(buf); - write(fd,"ds/showinfo\n",13); + write(fd,"ds/showinfo\n",12); if ((n=read(fd,buf,BUFSIZE))<=0) { printlog(LOG_ERR,"Error reading ctl socket from VDE switch: %s",strerror(errno)); exit(-1); diff --git a/vdetelweb/web.c b/vdetelweb/web.c index 7deb096..6b99da5 100644 --- a/vdetelweb/web.c +++ b/vdetelweb/web.c @@ -169,6 +169,8 @@ static int vde_getanswer(voidfun f,void *arg,int vdefd) int n=0,ib=0,il=0,indata=0,eoa=0; do { n=read(vdefd,buf,BUFSIZE); + if (n==0) + exit(0); for(ib=0;ib