1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

libcli: Add tstream_npa_socketpair() function.

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
Andreas Schneider 2013-09-19 14:52:22 +02:00 committed by Stefan Metzmacher
parent 30e5a5c5bf
commit eec05fb70f
2 changed files with 67 additions and 0 deletions

View File

@ -1442,3 +1442,60 @@ int _tstream_npa_accept_existing_recv(struct tevent_req *req,
tevent_req_received(req);
return 0;
}
/* SOCKETPAIR for internal rpc communication */
/* file_type is FILE_TYPE_BYTE_MODE_PIPE or FILE_TYPE_MESSAGE_MODE_PIPE */
int _tstream_npa_socketpair(uint16_t file_type,
TALLOC_CTX *mem_ctx1,
struct tstream_context **pstream1,
TALLOC_CTX *mem_ctx2,
struct tstream_context **pstream2,
const char *location)
{
struct tstream_context *stream1 = NULL;
struct tstream_context *stream2 = NULL;
int fds[2];
int fd1;
int fd2;
int rc;
rc = socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
if (rc == -1) {
return -1;
}
fd1 = fds[0];
fd2 = fds[1];
rc = _tstream_npa_existing_socket(mem_ctx1,
fd1,
file_type,
&stream1,
location);
if (rc == -1) {
int sys_errno = errno;
close(fd1);
close(fd2);
errno = sys_errno;
return -1;
}
rc = _tstream_npa_existing_socket(mem_ctx2,
fd2,
file_type,
&stream2,
location);
if (rc == -1) {
int sys_errno = errno;
talloc_free(stream1);
close(fd2);
errno = sys_errno;
return -1;
}
*pstream1 = stream1;
*pstream2 = stream2;
return 0;
}

View File

@ -117,4 +117,14 @@ int _tstream_npa_accept_existing_recv(struct tevent_req *req,
session_info, \
__location__)
int _tstream_npa_socketpair(uint16_t file_type,
TALLOC_CTX *mem_ctx1,
struct tstream_context **pstream1,
TALLOC_CTX *mem_ctx2,
struct tstream_context **pstream2,
const char *location);
#define tstream_npa_socketpair(ft, mem1, stream1, mem2, stream2) \
_tstream_npa_socketpair(ft, mem1, stream1, mem2, stream2, \
__location__)
#endif /* NPA_TSTREAM_H */