unix socket hang when connect

Yuyi Wang Strawberry_Str@hotmail.com
Mon Apr 7 07:08:32 GMT 2025


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;
}
--
Sincerely,
Yuyi Wang


More information about the Cygwin mailing list

AltStyle によって変換されたページ (->オリジナル) /