uint16_t flags,
void *private_data);
-int dcesrv_create_ncacn_ip_tcp_socket(const struct sockaddr_storage *ifss,
- uint16_t *port)
+NTSTATUS dcesrv_create_ncacn_ip_tcp_socket(const struct sockaddr_storage *ifss,
+ uint16_t *port,
+ int *out_fd)
{
int fd = -1;
}
if (fd == -1) {
DEBUG(0, ("Failed to create socket on port %u!\n", *port));
- return -1;
+ return NT_STATUS_UNSUCCESSFUL;
}
DEBUG(10, ("Opened tcpip socket fd %d for port %u\n", fd, *port));
- return fd;
+ *out_fd = fd;
+
+ return NT_STATUS_OK;
}
uint16_t setup_dcerpc_ncacn_tcpip_socket(struct tevent_context *ev_ctx,
struct dcerpc_ncacn_listen_state *state;
struct tevent_fd *fde;
int rc;
+ NTSTATUS status;
state = talloc(ev_ctx, struct dcerpc_ncacn_listen_state);
if (state == NULL) {
state->ep.port = port;
state->disconnect_fn = NULL;
- state->fd = dcesrv_create_ncacn_ip_tcp_socket(ifss, &state->ep.port);
- if (state->fd == -1) {
+ status = dcesrv_create_ncacn_ip_tcp_socket(ifss, &state->ep.port,
+ &state->fd);
+ if (!NT_STATUS_IS_OK(status)) {
goto out;
}
void *private_data);
void named_pipe_packet_process(struct tevent_req *subreq);
-int dcesrv_create_ncacn_ip_tcp_socket(const struct sockaddr_storage *ifss,
- uint16_t *port);
+NTSTATUS dcesrv_create_ncacn_ip_tcp_socket(const struct sockaddr_storage *ifss,
+ uint16_t *port,
+ int *out_fd);
uint16_t setup_dcerpc_ncacn_tcpip_socket(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx,
const struct sockaddr_storage *ifss,
const char *addr;
int fd;
- fd = dcesrv_create_ncacn_ip_tcp_socket(ifss, &p);
- if (fd < 0) {
- status = NT_STATUS_UNSUCCESSFUL;
+ status = dcesrv_create_ncacn_ip_tcp_socket(ifss,
+ &p,
+ &fd);
+ if (!NT_STATUS_IS_OK(status)) {
goto done;
}
listen_fd[*listen_fd_size] = fd;
continue;
}
- fd = dcesrv_create_ncacn_ip_tcp_socket(&ss, &p);
- if (fd < 0) {
- status = NT_STATUS_UNSUCCESSFUL;
+ status = dcesrv_create_ncacn_ip_tcp_socket(&ss,
+ &p,
+ &fd);
+ if (!NT_STATUS_IS_OK(status)) {
goto done;
}
listen_fd[*listen_fd_size] = fd;