int
set_nonblocking(int fd)
{
+#ifndef _WIN32
int flags = fcntl(fd, F_GETFL, 0);
if (flags != -1) {
if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) != -1) {
VLOG_ERR("fcntl(F_GETFL) failed: %s", ovs_strerror(errno));
return errno;
}
+#else
+ unsigned long arg = 1;
+ if (ioctlsocket(fd, FIONBIO, &arg)) {
+ int error = sock_errno();
+ VLOG_ERR("set_nonblocking failed: %s", sock_strerror(error));
+ return error;
+ }
+ return 0;
+#endif
}
void
case EAI_MEMORY:
return ENOMEM;
-#ifdef EAI_NODATA
+#if defined (EAI_NODATA) && EAI_NODATA != EAI_NONAME
case EAI_NODATA:
return ENXIO;
#endif
+#ifdef EAI_SYSTEM
case EAI_SYSTEM:
return sock_errno();
+#endif
default:
return EPROTO;
}
}
+#ifndef _WIN32
/* Attempts to shorten 'name' by opening a file descriptor for the directory
* part of the name and indirecting through /proc/self/fd/<dirfd>/<basename>.
* On systems with Linux-like /proc, this works as long as <basename> isn't too
? sun_len - offsetof(struct sockaddr_un, sun_path)
: 0);
}
+#endif /* _WIN32 */
ovs_be32
guess_netmask(ovs_be32 ip_)
memset(ssp, 0, sizeof *ssp);
}
if (fd >= 0) {
- close(fd);
+ closesocket(fd);
fd = -1;
}
} else {
if (ssp) {
memset(ssp, 0, sizeof *ssp);
}
- close(fd);
+ closesocket(fd);
return -error;
}
fsync_parent_dir(const char *file_name)
{
int error = 0;
+#ifndef _WIN32
char *dir;
int fd;
VLOG_ERR("%s: open failed (%s)", dir, ovs_strerror(error));
}
free(dir);
+#endif
return error;
}
ds_put_format(string, "%s:%"PRIu16,
ss_format_address(&ss, addrbuf, sizeof addrbuf),
ss_get_port(&ss));
+#ifndef _WIN32
} else if (ss.ss_family == AF_UNIX) {
struct sockaddr_un sun;
const char *null;
null = memchr(sun.sun_path, '\0', maxlen);
ds_put_buffer(string, sun.sun_path,
null ? null - sun.sun_path : maxlen);
+#endif
}
#ifdef HAVE_NETLINK
else if (ss.ss_family == AF_NETLINK) {
struct stat s;
ds_init(&string);
+#ifndef _WIN32
if (fstat(fd, &s)) {
ds_put_format(&string, "fstat failed (%s)", ovs_strerror(errno));
} else if (S_ISSOCK(s.st_mode)) {
put_fd_filename(&string, fd);
#endif
}
+#else
+ ds_put_format(&string,"file descriptor");
+#endif /* _WIN32 */
return ds_steal_cstr(&string);
}
+#ifndef _WIN32
/* Calls ioctl() on an AF_INET sock, passing the specified 'command' and
* 'arg'. Returns 0 if successful, otherwise a positive errno value. */
int
}
return error;
}
+#endif
\f
/* sockaddr_storage helpers. */