int readsize;
int ret;
+ fd_set set;
+
readsize = 0;
while (size > 0) {
+ FD_ZERO(&set);
+ FD_SET(handle, &set);
+
if (timeout > 0.0f) {
struct timeval tv;
- fd_set set;
-
- FD_ZERO(&set);
- FD_SET(handle, &set);
tv.tv_sec = (unsigned long)timeout;
tv.tv_usec = (timeout - (unsigned long)timeout) * 1000000u;
-
ret = select(handle + 1, &set, NULL, NULL, &tv);
- if (ret < 0) {
- /*!< Error */
- ret = -errno;
- ErrPrint("Error: %s\n", strerror(errno));
- return ret;
- } else if (ret == 0) {
- /*!< Timeout */
- ErrPrint("Timeout expired\n");
- return -ETIMEDOUT;
- }
+ } else if (timeout == 0.0f) {
+ ret = select(handle + 1, &set, NULL, NULL, NULL);
+ } else {
+ ErrPrint("Invalid timeout: %lf (it must be greater than 0.0)\n", timeout);
+ return -EINVAL;
+ }
- if (!FD_ISSET(handle, &set)) {
- ErrPrint("Unexpected handle is toggled\n");
- return -EINVAL;
- }
+ if (ret < 0) {
+ /*!< Error */
+ ret = -errno;
+ ErrPrint("Error: %s\n", strerror(errno));
+ return ret;
+ } else if (ret == 0) {
+ /*!< Timeout */
+ ErrPrint("Timeout expired\n");
+ return -ETIMEDOUT;
+ }
+
+ if (!FD_ISSET(handle, &set)) {
+ ErrPrint("Unexpected handle is toggled\n");
+ return -EINVAL;
}
ret = secure_socket_recv(handle, buffer + readsize, size, sender_pid);
int writesize;
int ret;
+ fd_set set;
+
writesize = 0;
while (size > 0) {
+
+ FD_ZERO(&set);
+ FD_SET(handle, &set);
+
if (timeout > 0.0f) {
struct timeval tv;
- fd_set set;
-
- FD_ZERO(&set);
- FD_SET(handle, &set);
tv.tv_sec = (unsigned long)timeout;
tv.tv_usec = (timeout - (unsigned long)timeout) * 1000000u;
ret = select(handle + 1, NULL, &set, NULL, &tv);
- if (ret < 0) {
- ret = -errno;
- ErrPrint("Error: %s\n", strerror(errno));
- return ret;
- } else if (ret == 0) {
- ErrPrint("Timeout expired\n");
- return -ETIMEDOUT;
- }
+ } else if (timeout == 0.0f) {
+ ret = select(handle + 1, NULL, &set, NULL, NULL);
+ } else {
+ ErrPrint("Invalid timeout: %lf (it must be greater than 0.0)\n", timeout);
+ return -EINVAL;
+ }
- if (!FD_ISSET(handle, &set)) {
- ErrPrint("Unexpected handle is toggled\n");
- return -EINVAL;
- }
+ if (ret < 0) {
+ ret = -errno;
+ ErrPrint("Error: %s\n", strerror(errno));
+ return ret;
+ } else if (ret == 0) {
+ ErrPrint("Timeout expired\n");
+ return -ETIMEDOUT;
+ }
+
+ if (!FD_ISSET(handle, &set)) {
+ ErrPrint("Unexpected handle is toggled\n");
+ return -EINVAL;
}
ret = secure_socket_send(handle, buffer + writesize, size);
if (close(handle) < 0)
ErrPrint("close a handle: %s\n", strerror(errno));
- return -1;
+ return -ENOTCONN;
}
if (setsockopt(handle, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)) < 0) {
ErrPrint("Failed to change sock opt : %s\n", strerror(errno));
if (close(handle) < 0)
ErrPrint("close a handle: %s\n", strerror(errno));
- return -1;
+ return -EFAULT;
}
return handle;
state = bind(handle, &addr, sizeof(addr));
if (state < 0) {
+ state = -errno;
+
ErrPrint("Failed to bind a socket %s\n", strerror(errno));
if (close(handle) < 0)
ErrPrint("Close a handle : %s\n", strerror(errno));
- return -1;
+ return state;
}
state = listen(handle, BACKLOG);
if (state < 0) {
+ state = -errno;
ErrPrint("Failed to listen a socket %s\n", strerror(errno));
if (close(handle) < 0)
ErrPrint("Close a handle : %s\n", strerror(errno));
- return -1;
+ return state;
}
if (chmod(peer, 0666) < 0)
handle = accept(server_handle, (struct sockaddr *)&addr, &size);
if (handle < 0) {
+ handle = -errno;
ErrPrint("Failed to accept a new client %s\n", strerror(errno));
- return -1;
+ return handle;
}
if (setsockopt(handle, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)) < 0) {
+ int ret;
+ ret = -errno;
ErrPrint("Failed to change sock opt : %s\n", strerror(errno));
if (close(handle) < 0)
ErrPrint("Close a handle: %s\n", strerror(errno));
- return -1;
+ return ret;
}
return handle;