On Mon, 7 Apr 2025 15:08:32 +0800 Yuyi Wang wrote: > Below is a simple unix socket testing code. It creates a unix socket server > and > a client to connect to it immediately. It works on Linux and macOS, but hangs > on > cygwin. bind + listen work well, but seems that the connect method never > returns. > > > #include <stdio.h> > #include <stdlib.h> > #include <string.h> > #include <unistd.h> > #include <sys/socket.h> > #include <sys/un.h> > #include <errno.h> > > #define SOCKET_PATH "/tmp/example_socket" > > int main() { > int server_fd, client_fd; > struct sockaddr_un server_addr; > socklen_t client_len; > > server_fd = socket(AF_UNIX, SOCK_STREAM, 0); > if (server_fd == -1) { > perror("server socket"); > exit(EXIT_FAILURE); > } > > memset(&server_addr, 0, sizeof(server_addr)); > server_addr.sun_family = AF_UNIX; > strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - > 1); > > if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) > == -1) { > perror("bind"); > exit(EXIT_FAILURE); > } > > if (listen(server_fd, 1) == -1) { > perror("listen"); > exit(EXIT_FAILURE); > } > > printf("Server is listening on %s\n", SOCKET_PATH); > > client_fd = socket(AF_UNIX, SOCK_STREAM, 0); > if (client_fd == -1) { > perror("client socket"); > exit(EXIT_FAILURE); > } > > if (connect(client_fd, (struct sockaddr*)&server_addr, > sizeof(server_addr)) == -1) { > perror("connect"); > exit(EXIT_FAILURE); > } > > printf("Client connected to server\n"); > > close(client_fd); > close(server_fd); > unlink(SOCKET_PATH); > > return 0; > }
I guess connect() just is just waiting accept(). -- Takashi Yano <takashi.y...@nifty.ne.jp> -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple