70,024
社区成员




static mgmt_ipc_err_e iscsid_connect(int *fd)
{
int nsec;
struct sockaddr_un addr;
*fd = socket(AF_LOCAL, SOCK_STREAM, 0);
if (*fd < 0) {
log_error("can not create IPC socket (%d)!", errno);
return MGMT_IPC_ERR_ISCSID_NOTCONN;
}
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_LOCAL;
memcpy((char *) &addr.sun_path + 1, ISCSIADM_NAMESPACE,
strlen(ISCSIADM_NAMESPACE));
/*
* Trying to connect with exponential backoff
*/
for (nsec = 1; nsec <= MAXSLEEP; nsec <<= 1) {
if (connect(*fd, (struct sockaddr *) &addr, sizeof(addr)) == 0)
{
/* Connection established */
return MGMT_IPC_OK;
}
/* If iscsid isn't there, there's no sense
* in retrying. */
if (errno == ECONNREFUSED)
break;
/*
* Delay before trying again
*/
if (nsec <= MAXSLEEP/2)
sleep(nsec);
}
log_error("can not connect to iSCSI daemon (%d)!", errno);
return MGMT_IPC_ERR_ISCSID_NOTCONN;
}
mgmt_ipc_err_e iscsid_request(int *fd, iscsiadm_req_t *req)
{
int err;
err = iscsid_connect(fd);
if (err)
return err;
printf("function write is start!.\n");
printf("The fd =%d.\n",*fd);
printf("The req addr is %x.\n",req);
printf("sizeof(*req)=%d.\n",sizeof(*req));
if ((err = write(*fd, req, sizeof(*req))) != sizeof(*req)) { /**********这句直接退出*******//
log_error("got write error (%d/%d) on cmd %d, daemon died?",
err, errno, req->command);
close(*fd);
return MGMT_IPC_ERR_ISCSID_COMM_ERR;
}
return MGMT_IPC_OK;
}
printf("The fd =%d.\n",*fd);
printf("The req addr is %x.\n",req);
printf("sizeof(*req)=%d.\n",sizeof(*req));
if ((err = write(*fd, req, sizeof(*req))) != sizeof(*req)) { /**********这句直接退出*******//
log_error("got write error (%d/%d) on cmd %d, daemon died?",
err, errno, req->command);
close(*fd);
return MGMT_IPC_ERR_ISCSID_COMM_ERR;
}