forked from lda/telodendria
Clean up some NonPosix.h stuff so we can build on Linux.
It appears that SOCK_NONBLOCK is not actually POSIX. According to the OpenBSD man page, it will be soon, and according to the Linux man page, it is a Linux extension. However, fcntl() with O_NONBLOCK seems to be portable across both systems.
This commit is contained in:
parent
bb93cae99a
commit
4707f0f4c8
3 changed files with 16 additions and 11 deletions
|
@ -41,6 +41,7 @@
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
struct HttpServer
|
struct HttpServer
|
||||||
{
|
{
|
||||||
|
@ -310,13 +311,18 @@ HttpServerCreate(unsigned short port, unsigned int nThreads, unsigned int maxCon
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
server->sd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);
|
server->sd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
|
||||||
if (server->sd < 0)
|
if (server->sd < 0)
|
||||||
{
|
{
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fcntl(server->sd, F_SETFL, O_NONBLOCK) == -1)
|
||||||
|
{
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
sa.sin_family = AF_INET;
|
sa.sin_family = AF_INET;
|
||||||
sa.sin_port = htons(port);
|
sa.sin_port = htons(port);
|
||||||
sa.sin_addr.s_addr = htonl(INADDR_ANY);
|
sa.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
*/
|
*/
|
||||||
#include <Log.h>
|
#include <Log.h>
|
||||||
|
|
||||||
|
#include <NonPosix.h>
|
||||||
#include <Memory.h>
|
#include <Memory.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
|
@ -30,6 +30,8 @@
|
||||||
#ifndef TELODENDRIA_NONPOSIX_H
|
#ifndef TELODENDRIA_NONPOSIX_H
|
||||||
#define TELODENDRIA_NONPOSIX_H
|
#define TELODENDRIA_NONPOSIX_H
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pretty much all Unix-like systems have a chroot() function. In fact,
|
* Pretty much all Unix-like systems have a chroot() function. In fact,
|
||||||
* chroot() used to be POSIX, so any operating system claiming to be
|
* chroot() used to be POSIX, so any operating system claiming to be
|
||||||
|
@ -40,6 +42,12 @@
|
||||||
*/
|
*/
|
||||||
extern int chroot(const char *);
|
extern int chroot(const char *);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pretty much every syslog interface has a vsyslog(). Unfortuntately,
|
||||||
|
* it is not POSIX.
|
||||||
|
*/
|
||||||
|
extern void vsyslog(int, const char *, va_list);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Telodendria is primarily developed on OpenBSD; as such, you can
|
* Telodendria is primarily developed on OpenBSD; as such, you can
|
||||||
* expect that it will use some OpenBSD-specific features if OpenBSD
|
* expect that it will use some OpenBSD-specific features if OpenBSD
|
||||||
|
@ -53,16 +61,6 @@ extern int chroot(const char *);
|
||||||
#ifdef __OpenBSD__
|
#ifdef __OpenBSD__
|
||||||
extern int pledge(const char *, const char *);
|
extern int pledge(const char *, const char *);
|
||||||
extern int unveil(const char *, const char *);
|
extern int unveil(const char *, const char *);
|
||||||
|
|
||||||
/*
|
|
||||||
* OpenBSD requires that _BSD_SOURCE be set to use SOCK_NONBLOCK for
|
|
||||||
* some reason, even though from everything I can tell, SOCK_NONBLOCK
|
|
||||||
* is POSIX.
|
|
||||||
*/
|
|
||||||
#ifndef _BSD_SOURCE
|
|
||||||
#define _BSD_SOURCE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue