remove eagain experiment
This commit is contained in:
parent
21153b7d14
commit
e31c9452c8
3 changed files with 0 additions and 131 deletions
27
eagain.c
27
eagain.c
|
@ -1,27 +0,0 @@
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/un.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
char path[] = "eagain.sock";
|
|
||||||
char spam[0xffff0];
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
int sock = socket(AF_UNIX, SOCK_STREAM, 0);
|
|
||||||
fcntl(sock, F_SETFL, O_NONBLOCK);
|
|
||||||
struct sockaddr_un addr;
|
|
||||||
addr.sun_family = AF_UNIX;
|
|
||||||
int i = 0;
|
|
||||||
while (1) {
|
|
||||||
addr.sun_path[i] = path[i];
|
|
||||||
if (path[i] == 0) break;
|
|
||||||
i += 1;
|
|
||||||
}
|
|
||||||
connect(sock, (struct sockaddr*)&addr, sizeof(addr));
|
|
||||||
//shutdown(sock, SHUT_WR);
|
|
||||||
for (i = 0; i < 9999; i += 1) {
|
|
||||||
int result = write(sock, spam, 0xffff);
|
|
||||||
if (result < 0) exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
92
eagain.s
92
eagain.s
|
@ -1,92 +0,0 @@
|
||||||
global _start
|
|
||||||
|
|
||||||
; constants
|
|
||||||
SYS_WRITE equ 1
|
|
||||||
SYS_SOCKET equ 41
|
|
||||||
SYS_CONNECT equ 42
|
|
||||||
SYS_SHUTDOWN equ 48
|
|
||||||
SYS_FCNTL equ 72
|
|
||||||
SYS_EXIT equ 60
|
|
||||||
AF_UNIX equ 1
|
|
||||||
SOCK_STREAM equ 1
|
|
||||||
F_GETFL equ 3
|
|
||||||
F_SETFL equ 4
|
|
||||||
O_NONBLOCK equ 2048
|
|
||||||
SHUT_RDWR equ 2
|
|
||||||
|
|
||||||
SECTION .data
|
|
||||||
server_path db "eagain.sock", 0x00
|
|
||||||
server_path_len equ $ - server_path
|
|
||||||
sockaddr_size equ 2 + 108 ; $ man 7 unix
|
|
||||||
|
|
||||||
SECTION .bss
|
|
||||||
sockaddr resb sockaddr_size
|
|
||||||
spam resb 0xffff
|
|
||||||
|
|
||||||
SECTION .text
|
|
||||||
|
|
||||||
_start:
|
|
||||||
mov rax, SYS_SOCKET
|
|
||||||
mov rdi, AF_UNIX
|
|
||||||
mov rsi, SOCK_STREAM
|
|
||||||
mov rdx, 0
|
|
||||||
syscall
|
|
||||||
|
|
||||||
mov r15, rax
|
|
||||||
|
|
||||||
call nonblocking
|
|
||||||
call make_sockaddr
|
|
||||||
|
|
||||||
mov rax, SYS_CONNECT
|
|
||||||
mov rdi, r15
|
|
||||||
mov rsi, sockaddr
|
|
||||||
mov rdx, sockaddr_size
|
|
||||||
syscall
|
|
||||||
|
|
||||||
loop:
|
|
||||||
mov rax, SYS_WRITE
|
|
||||||
mov rdi, r15
|
|
||||||
mov rsi, spam
|
|
||||||
mov rdx, 0xffff
|
|
||||||
syscall
|
|
||||||
|
|
||||||
cmp rax, 0
|
|
||||||
jge loop
|
|
||||||
|
|
||||||
mov rax, SYS_EXIT
|
|
||||||
mov rdi, 1
|
|
||||||
syscall
|
|
||||||
|
|
||||||
nonblocking:
|
|
||||||
mov r10, rax
|
|
||||||
|
|
||||||
mov rax, SYS_FCNTL
|
|
||||||
mov rdi, r10
|
|
||||||
mov rsi, F_GETFL
|
|
||||||
syscall
|
|
||||||
|
|
||||||
mov r11, rax
|
|
||||||
xor r11, O_NONBLOCK
|
|
||||||
|
|
||||||
mov rax, SYS_FCNTL
|
|
||||||
mov rdi, r10
|
|
||||||
mov rsi, F_SETFL
|
|
||||||
mov rdx, r11
|
|
||||||
syscall
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
make_sockaddr:
|
|
||||||
mov word [sockaddr], AF_UNIX
|
|
||||||
mov rax, 0
|
|
||||||
|
|
||||||
make_sockaddr__copy_server_path:
|
|
||||||
cmp rax, server_path_len
|
|
||||||
jge return
|
|
||||||
mov r10, [server_path + rax]
|
|
||||||
mov [sockaddr + rax + 2], r10
|
|
||||||
add rax, 8
|
|
||||||
jmp make_sockaddr__copy_server_path
|
|
||||||
|
|
||||||
return:
|
|
||||||
ret
|
|
12
eagain.zig
12
eagain.zig
|
@ -1,12 +0,0 @@
|
||||||
const std = @import("std");
|
|
||||||
|
|
||||||
const path = "eagain.sock";
|
|
||||||
const spam: [0xffff]u8 = undefined;
|
|
||||||
|
|
||||||
pub fn main() !void {
|
|
||||||
const stream = try std.net.connectUnixSocket(path);
|
|
||||||
_ = try std.posix.fcntl(stream.handle, std.c.F.SETFL, std.c.SOCK.NONBLOCK);
|
|
||||||
for (0..99999) |_| {
|
|
||||||
_ = try stream.write(&spam);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue