ssize_t ret;
int err;
bool retry;
+ int flags = 0;
if (state->dst) {
struct tsocket_address_bsd *bsda =
sa_socklen = bsda->sa_socklen;
}
- ret = sendto(bsds->fd, state->buf, state->len, 0, sa, sa_socklen);
+#ifdef MSG_NOSIGNAL
+ flags |= MSG_NOSIGNAL;
+#endif
+ ret = sendto(bsds->fd, state->buf, state->len, flags, sa, sa_socklen);
err = tsocket_bsd_error_from_errno(ret, errno, &retry);
if (retry) {
/* retry later */
int err;
int _count;
bool ok, retry;
-
- ret = writev(bsds->fd, state->vector, state->count);
+ struct msghdr msg;
+ int flags = 0;
+
+ msg.msg_name = NULL; /* optional address */
+ msg.msg_namelen = 0; /* size of address */
+ msg.msg_iov = state->vector; /* scatter/gather array */
+ msg.msg_iovlen = state->count; /* # elements in msg_iov */
+ msg.msg_control = NULL; /* ancillary data, see below */
+ msg.msg_controllen = 0; /* ancillary data buffer len */
+ msg.msg_flags = 0; /* flags on received message */
+
+#ifdef MSG_NOSIGNAL
+ flags |= MSG_NOSIGNAL;
+#endif
+ ret = sendmsg(bsds->fd, &msg, flags);
if (ret == 0) {
/* propagate end of file */
tevent_req_error(req, EPIPE);