[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;
}