13 Jul
2006
13 Jul
'06
10:41 p.m.
It appears the problem is in this function:
int net_connect_unix(const char *path) { struct sockaddr_un sa; int fd, ret;
memset(&sa, 0, sizeof(sa));
sa.sun_family = AF_UNIX;
if (strocpy(sa.sun_path, path, sizeof(sa.sun_path)) < 0) {
/* too long path */
errno = EINVAL;
return -1;
}
/* create the socket */
fd = socket(PF_UNIX, SOCK_STREAM, 0);
if (fd == -1) {
i_error("socket(%s) failed: %m", path);
return -1;
}
net_set_nonblock(fd, TRUE);
/* connect */
ret = connect(fd, (void *)&sa, sizeof(sa));
if (ret < 0 && errno != EINPROGRESS) {
close_keep_errno(fd);
return -1;
}
return fd;
}
This function is returning -1 and the server is crashing - Most likely because of a socket error.
The error message from the socket is "Resource temporarily unavailable"
If anybody knows why that would happen, I might be able figure out a solution.
Thanks!