unix-listen.cpp (492B)
1 #include "linux.hpp" 2 3 int main(int argc, char* argv[], char* envp[]) 4 { 5 if (argc <= 2) 6 return 1; 7 8 (void)unlinkat(AT_FDCWD, argv[1], {}); 9 10 file sock = *socket(1/*AF_UNIX*/, 1/*SOCK_STREAM*/, 0); 11 un_addr addr{span<char const>{argv[1], c_str{argv[1]}.length()}}; 12 *bind(sock, addr); 13 *listen(sock, 1); 14 socklen_t addr_len = sizeof(addr); 15 file conn = *accept(sock, &addr, &addr_len); 16 *dup(conn, stdin); 17 *dup(conn, stdout); 18 *close(conn); 19 *close(sock); 20 *execve(argv[2], argv+2, envp); 21 }