|
@@ -514,6 +514,7 @@ void sock_domain_to_str(int domain)
|
|
|
|
|
|
int socket(SOCKET_SIG)
|
|
|
{
|
|
|
+ int err;
|
|
|
#ifdef CHECKS
|
|
|
/* Check that type makes sense */
|
|
|
int flags = socket_type & ~SOCK_TYPE_MASK;
|
|
@@ -572,13 +573,16 @@ int socket(SOCKET_SIG)
|
|
|
}
|
|
|
else { // Try to read retval+errno since we RXed a bad fd
|
|
|
dwr("Error, service sent bad fd.\n");
|
|
|
- return get_retval();
|
|
|
+ err = get_retval();
|
|
|
+ pthread_mutex_unlock(&lock);
|
|
|
+ return err;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
dwr("Error while receiving new FD.\n");
|
|
|
+ err = get_retval();
|
|
|
pthread_mutex_unlock(&lock);
|
|
|
- return get_retval();
|
|
|
+ return err;
|
|
|
}
|
|
|
#endif
|
|
|
}
|
|
@@ -591,7 +595,7 @@ int socket(SOCKET_SIG)
|
|
|
connect() intercept function */
|
|
|
int connect(CONNECT_SIG)
|
|
|
{
|
|
|
-
|
|
|
+ int err;
|
|
|
/* FIXME: Check that address is in user space, return EFAULT ? */
|
|
|
|
|
|
#ifdef DUMMY
|
|
@@ -635,23 +639,9 @@ int connect(CONNECT_SIG)
|
|
|
memcpy(&cmd[1], &rpc_st, sizeof(struct connect_st));
|
|
|
pthread_mutex_lock(&lock);
|
|
|
send_command(fdret_sock, cmd);
|
|
|
-
|
|
|
- if(fdret_sock >= 0) {
|
|
|
- int retval;
|
|
|
- char mynewbuf[BUF_SZ];
|
|
|
- memset(&mynewbuf, '\0', sizeof(mynewbuf));
|
|
|
- int n_read = read(fdret_sock, &mynewbuf, sizeof(mynewbuf));
|
|
|
- if(n_read > 0) {
|
|
|
- memcpy(&retval, &mynewbuf[1], sizeof(int));
|
|
|
- pthread_mutex_unlock(&lock);
|
|
|
- return retval;
|
|
|
- }
|
|
|
- else {
|
|
|
- pthread_mutex_unlock(&lock);
|
|
|
- dwr("unable to read connect: return value\n");
|
|
|
- }
|
|
|
- }
|
|
|
- return -1;
|
|
|
+ err = get_retval();
|
|
|
+ pthread_mutex_unlock(&lock);
|
|
|
+ return err;
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -696,6 +686,7 @@ int poll(POLL_SIG)
|
|
|
bind() intercept function */
|
|
|
int bind(BIND_SIG)
|
|
|
{
|
|
|
+ int err;
|
|
|
#ifdef DUMMY
|
|
|
dwr("bind(%d)\n", sockfd);
|
|
|
return realbind(sockfd, addr, addrlen);
|
|
@@ -735,9 +726,10 @@ int bind(BIND_SIG)
|
|
|
memcpy(&cmd[1], &rpc_st, sizeof(struct bind_st));
|
|
|
pthread_mutex_lock(&lock);
|
|
|
send_command(fdret_sock, cmd);
|
|
|
+ err = get_retval();
|
|
|
pthread_mutex_unlock(&lock);
|
|
|
errno = ERR_OK;
|
|
|
- return get_retval();
|
|
|
+ return err;
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -842,6 +834,7 @@ int accept(ACCEPT_SIG)
|
|
|
listen() intercept function */
|
|
|
int listen(LISTEN_SIG)
|
|
|
{
|
|
|
+ int err;
|
|
|
/* FIXME: Check that this socket supports listen(), return EOPNOTSUPP */
|
|
|
/* FIXME: Check that the provided fd is a socket, return ENOTSOCK */
|
|
|
|
|
@@ -865,8 +858,9 @@ int listen(LISTEN_SIG)
|
|
|
memcpy(&cmd[1], &rpc_st, sizeof(struct listen_st));
|
|
|
pthread_mutex_lock(&lock);
|
|
|
send_command(fdret_sock, cmd);
|
|
|
+ err = get_retval();
|
|
|
pthread_mutex_unlock(&lock);
|
|
|
errno = ERR_OK;
|
|
|
- return get_retval();
|
|
|
+ return err;
|
|
|
#endif
|
|
|
}
|