ERROR("failed to create hashed name for monitor socket");
return-1;
return-1;
}
sockname[sizeof(addr->sun_path)-3]='\0';
/* replace @ with \0 */
INFO("Using monitor socket name \"%s\".",sockname);
addr->sun_path[0]='\0';
INFO("using monitor socket name \"%s\" (length of socket name %zu must be <= %zu)",&addr->sun_path[1],strlen(&addr->sun_path[1]),sizeof(addr->sun_path)-3);
return0;
return0;
}
}
...
@@ -193,7 +209,8 @@ int lxc_monitor_open(const char *lxcpath)
...
@@ -193,7 +209,8 @@ int lxc_monitor_open(const char *lxcpath)
intfd;
intfd;
size_tretry;
size_tretry;
size_tlen;
size_tlen;
intret=0,backoff_ms[]={10,50,100};
intret=-1;
intbackoff_ms[]={10,50,100};
if(lxc_monitor_sock_name(lxcpath,&addr)<0)
if(lxc_monitor_sock_name(lxcpath,&addr)<0)
return-1;
return-1;
...
@@ -201,28 +218,32 @@ int lxc_monitor_open(const char *lxcpath)
...
@@ -201,28 +218,32 @@ int lxc_monitor_open(const char *lxcpath)
fd=socket(PF_UNIX,SOCK_STREAM,0);
fd=socket(PF_UNIX,SOCK_STREAM,0);
if(fd<0){
if(fd<0){
ERROR("Failed to create socket: %s.",strerror(errno));
ERROR("Failed to create socket: %s.",strerror(errno));
return-1;
return-errno;
}
}
len=strlen(&addr.sun_path[1])+1;
len=strlen(&addr.sun_path[1]);
DEBUG("opening monitor socket %s with len %zu",&addr.sun_path[1],len);
if(len>=sizeof(addr.sun_path)-1){
if(len>=sizeof(addr.sun_path)-1){
ret=-1;
errno=ENAMETOOLONG;
errno=ENAMETOOLONG;
ret=-errno;
ERROR("name of monitor socket too long (%zu bytes): %s",len,strerror(errno));