summaryrefslogtreecommitdiff
path: root/source4/heimdal/lib/roken/net_write.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/heimdal/lib/roken/net_write.c')
-rw-r--r--source4/heimdal/lib/roken/net_write.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/source4/heimdal/lib/roken/net_write.c b/source4/heimdal/lib/roken/net_write.c
index 94c9df1c38..e1cfa99074 100644
--- a/source4/heimdal/lib/roken/net_write.c
+++ b/source4/heimdal/lib/roken/net_write.c
@@ -70,9 +70,28 @@ net_write(rk_socket_t sock, const void *buf, size_t nbytes)
const char *cbuf = (const char *)buf;
ssize_t count;
size_t rem = nbytes;
+#ifdef SOCKET_IS_NOT_AN_FD
+ int use_write = 0;
+#endif
while (rem > 0) {
+#ifdef SOCKET_IS_NOT_AN_FD
+ if (use_write)
+ count = _write (sock, cbuf, rem);
+ else
+ count = send (sock, cbuf, rem, 0);
+
+ if (use_write == 0 &&
+ rk_IS_SOCKET_ERROR(count) &&
+ (rk_SOCK_ERRNO == WSANOTINITIALISED ||
+ rk_SOCK_ERRNO == WSAENOTSOCK)) {
+ use_write = 1;
+
+ count = _write (sock, cbuf, rem);
+ }
+#else
count = send (sock, cbuf, rem, 0);
+#endif
if (count < 0) {
if (errno == EINTR)
continue;