mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
fixed socketpair_tcp for OpenBSD
This commit is contained in:
parent
547d63c60a
commit
d99ce6a5e3
@ -1156,7 +1156,7 @@ the resulting file descriptors are symmetrical
|
|||||||
static int socketpair_tcp(int fd[2])
|
static int socketpair_tcp(int fd[2])
|
||||||
{
|
{
|
||||||
int listener;
|
int listener;
|
||||||
struct sockaddr sock;
|
struct sockaddr_in sock;
|
||||||
struct sockaddr_in sock2;
|
struct sockaddr_in sock2;
|
||||||
socklen_t socklen = sizeof(sock);
|
socklen_t socklen = sizeof(sock);
|
||||||
int connect_done = 0;
|
int connect_done = 0;
|
||||||
@ -1177,19 +1177,21 @@ static int socketpair_tcp(int fd[2])
|
|||||||
|
|
||||||
if (listen(listener, 1) != 0) goto failed;
|
if (listen(listener, 1) != 0) goto failed;
|
||||||
|
|
||||||
if (getsockname(listener, &sock, &socklen) != 0) goto failed;
|
if (getsockname(listener, (struct sockaddr *)&sock, &socklen) != 0) goto failed;
|
||||||
|
|
||||||
if ((fd[1] = socket(PF_INET, SOCK_STREAM, 0)) == -1) goto failed;
|
if ((fd[1] = socket(PF_INET, SOCK_STREAM, 0)) == -1) goto failed;
|
||||||
|
|
||||||
set_blocking(fd[1], 0);
|
set_blocking(fd[1], 0);
|
||||||
|
|
||||||
|
sock.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
|
||||||
|
|
||||||
if (connect(fd[1],(struct sockaddr *)&sock,sizeof(sock)) == -1) {
|
if (connect(fd[1],(struct sockaddr *)&sock,sizeof(sock)) == -1) {
|
||||||
if (errno != EINPROGRESS) goto failed;
|
if (errno != EINPROGRESS) goto failed;
|
||||||
} else {
|
} else {
|
||||||
connect_done = 1;
|
connect_done = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((fd[0] = accept(listener, &sock, &socklen)) == -1) goto failed;
|
if ((fd[0] = accept(listener, (struct sockaddr *)&sock, &socklen)) == -1) goto failed;
|
||||||
|
|
||||||
close(listener);
|
close(listener);
|
||||||
if (connect_done == 0) {
|
if (connect_done == 0) {
|
||||||
@ -1220,7 +1222,10 @@ attached to the original stderr
|
|||||||
int sock_exec(const char *prog)
|
int sock_exec(const char *prog)
|
||||||
{
|
{
|
||||||
int fd[2];
|
int fd[2];
|
||||||
if (socketpair_tcp(fd) != 0) return -1;
|
if (socketpair_tcp(fd) != 0) {
|
||||||
|
DEBUG(0,("socketpair_tcp failed (%s)\n", strerror(errno)));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
if (fork() == 0) {
|
if (fork() == 0) {
|
||||||
close(fd[0]);
|
close(fd[0]);
|
||||||
close(0);
|
close(0);
|
||||||
|
Loading…
Reference in New Issue
Block a user