When getting a socket POLLERR event, use getsockopt(SO_ERROR)
to create a better error message about the reason for the socket failing.
This commit is contained in:
+15
-2
@@ -302,8 +302,21 @@ int
|
|||||||
iscsi_service(struct iscsi_context *iscsi, int revents)
|
iscsi_service(struct iscsi_context *iscsi, int revents)
|
||||||
{
|
{
|
||||||
if (revents & POLLERR) {
|
if (revents & POLLERR) {
|
||||||
iscsi_set_error(iscsi, "iscsi_service: POLLERR, "
|
int err = 0;
|
||||||
"socket error.");
|
socklen_t err_size = sizeof(err);
|
||||||
|
|
||||||
|
if (getsockopt(iscsi->fd, SOL_SOCKET, SO_ERROR,
|
||||||
|
&err, &err_size) != 0 || err != 0) {
|
||||||
|
if (err == 0) {
|
||||||
|
err = errno;
|
||||||
|
}
|
||||||
|
iscsi_set_error(iscsi, "iscsi_service: socket error "
|
||||||
|
"%s(%d).",
|
||||||
|
strerror(err), err);
|
||||||
|
} else {
|
||||||
|
iscsi_set_error(iscsi, "iscsi_service: POLLERR, "
|
||||||
|
"Unknown socket error.");
|
||||||
|
}
|
||||||
iscsi->socket_status_cb(iscsi, SCSI_STATUS_ERROR, NULL,
|
iscsi->socket_status_cb(iscsi, SCSI_STATUS_ERROR, NULL,
|
||||||
iscsi->connect_data);
|
iscsi->connect_data);
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user