[err] evsig_init: socketpair: Protocol family not supported
@strim_, post #2
@strim_, post #2
Np. nie wiem jak ixemul radzi sobie z socketami AF_UNIX
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> int main(int argc,char **argv) { int z; /* Zwracany kod stanu */ int s[2]; /* Para gniazd */ /* * Tworzymy pare lokalnych gniazd */ z = socketpair(PF_LOCAL,SOCK_STREAM,0,s); if ( z == -1 ) { fprintf(stderr, "%s: socketpair(PF_LOCAL,SOCK_STREAM,0)\n", strerror(errno)); return 1; /* Niepowodzenie */ } /* * Wyswietlamy deskryptor pliku: */ printf("s[0] = %d;\n,s[0]"); printf("s[1] = %d;\n,s[1]"); /*system(netstat --unix -p);*/ return 0; }
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <netinet/in.h> #define evutil_socket_t int int evutil_closesocket(evutil_socket_t sock) { return close(sock); } int main(int family, int type, int protocol, evutil_socket_t fd[2]) { return evutil_ersatz_socketpair(family, type, protocol, fd); } int evutil_ersatz_socketpair(int family, int type, int protocol, evutil_socket_t fd[2]) { int listener; /* Gniazdo */ struct sockaddr_in listen_addr; /* AF_INET */ int len_inet; /* dlugosc */ listener = socket(PF_INET, SOCK_STREAM, 0); if (listener < 0) return -1; memset(&listen_addr,0,sizeof listen_addr); listen_addr.sin_family = AF_INET; listen_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); listen_addr.sin_port = 0; /* kernel chooses port. */ len_inet = sizeof listen_addr; if (bind(listener, (struct sockaddr *) &listen_addr, sizeof (listen_addr))== -1) goto tidy_up_and_fail; if (listen(listener, 1) == -1) goto tidy_up_and_fail; int connector; /* Gniazdo */ int size; /* dlugosc */ struct sockaddr_in connect_addr; /* AF_INET */ int acceptor; connector = socket(PF_INET,SOCK_STREAM,0); if (connector < 0) goto tidy_up_and_fail; /* We want to find out the port number to connect to. */ size = sizeof(connect_addr); if (getsockname(listener, (struct sockaddr *) &connect_addr, &size) == -1) goto tidy_up_and_fail; if (size != sizeof (connect_addr)) goto tidy_up_and_fail; if (connect(connector, (struct sockaddr *) &connect_addr, sizeof(connect_addr)) == -1) goto tidy_up_and_fail; size = sizeof(listen_addr); acceptor = accept(listener, (struct sockaddr *) &listen_addr, &size); if (acceptor < 0) goto tidy_up_and_fail; if (size != sizeof(listen_addr)) goto tidy_up_and_fail; evutil_closesocket(listener); /* Now check we are talking to ourself by matching port and host on the two sockets. */ if (getsockname(connector, (struct sockaddr *) &connect_addr, &size) == -1) goto tidy_up_and_fail; if (size != sizeof (connect_addr) || listen_addr.sin_family != connect_addr.sin_family || listen_addr.sin_addr.s_addr != connect_addr.sin_addr.s_addr || listen_addr.sin_port != connect_addr.sin_port) goto tidy_up_and_fail; fd[0] = connector; fd[1] = acceptor; system("less evutil-ede-1.c"); return 0; tidy_up_and_fail: if (listener != -1) evutil_closesocket(listener); if (connector != -1) evutil_closesocket(connector); if (acceptor != -1) evutil_closesocket(acceptor); return -1; }