+ int err = 0;
+ socklen_t err_size = sizeof(err);
+
+ if (getsockopt(rpc->fd, SOL_SOCKET, SO_ERROR,
+ &err, &err_size) != 0 || err != 0) {
+ if (err == 0) {
+ err = errno;
+ }
+ rpc_set_error(rpc, "rpc_service: socket error "
+ "%s(%d) while connecting.",
+ strerror(err), err);
+ rpc->connect_cb(rpc, RPC_STATUS_ERROR,
+ NULL, rpc->connect_data);
+ return -1;
+ }
+