mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-03 19:22:27 +00:00
Mint APE Loader v1.4
This change also incorporates more bug fixes and improvements to a wide variety of small things. For example this fixes #860 so Windows console doesn't get corrupted after exit. An system stack memory map issue with aarch64 has been fixed. We no longer use O_NONBLOCK on AF_UNIX sockets. Crash reports on Arm64 will now demangle C++ symbols, even when c++filt isn't available. Most importantly the Apple M1 version of APE Loader is brought up to date by this change. A prebuilt unsigned binary for it is being included in build/bootstrap/. One more thing: retrieving the term dimensions under --strace was causing the stack to become corrupted and now that's been solved too. PSS: We're now including an ELF PT_NOTE for APE in the binaries we build, that has the APE Loader version.
This commit is contained in:
parent
53d3f9d9c5
commit
6843150e0c
25 changed files with 524 additions and 226 deletions
|
@ -17,6 +17,7 @@
|
|||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/calls/struct/timeval.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/sock/goodsocket.internal.h"
|
||||
#include "libc/sock/sock.h"
|
||||
#include "libc/sysv/consts/so.h"
|
||||
|
@ -33,18 +34,23 @@ static bool Tune(int fd, int a, int b, int x) {
|
|||
*/
|
||||
int GoodSocket(int family, int type, int protocol, bool isserver,
|
||||
const struct timeval *timeout) {
|
||||
int fd;
|
||||
int e, fd;
|
||||
if ((fd = socket(family, type, protocol)) != -1) {
|
||||
e = errno;
|
||||
if (isserver) {
|
||||
Tune(fd, SOL_TCP, TCP_FASTOPEN, 100);
|
||||
Tune(fd, SOL_SOCKET, SO_REUSEADDR, 1);
|
||||
} else {
|
||||
Tune(fd, SOL_TCP, TCP_FASTOPEN_CONNECT, 1);
|
||||
}
|
||||
errno = e;
|
||||
if (!Tune(fd, SOL_TCP, TCP_QUICKACK, 1)) {
|
||||
e = errno;
|
||||
Tune(fd, SOL_TCP, TCP_NODELAY, 1);
|
||||
errno = e;
|
||||
}
|
||||
if (timeout) {
|
||||
e = errno;
|
||||
if (timeout->tv_sec < 0) {
|
||||
Tune(fd, SOL_SOCKET, SO_KEEPALIVE, 1);
|
||||
Tune(fd, SOL_TCP, TCP_KEEPIDLE, -timeout->tv_sec);
|
||||
|
@ -53,6 +59,7 @@ int GoodSocket(int family, int type, int protocol, bool isserver,
|
|||
setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, timeout, sizeof(*timeout));
|
||||
setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, timeout, sizeof(*timeout));
|
||||
}
|
||||
errno = e;
|
||||
}
|
||||
}
|
||||
return fd;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue